ํฐ๋ (1002๋ฒ)
Silver 3
#์ํ #๊ธฐํํ #๋ง์ ์กฐ๊ฑด ๋ถ๊ธฐ
https://www.acmicpc.net/problem/1002
๋ฌธ์ ๋ด์ฉ
๋ฌธ์ ์ ๊ทผ
์ ๋ ฅ ํ์์ ๋ณด๋ฉด ํฐ๋ ์ ์ขํ์ ๋ง๋ฆฐ๊ณผ์ ๊ฑฐ๋ฆฌ๊ฐ ๋์จ๋ค. ์ด๋ฅผ ์ด์ฉํด ์์ ์ด์ฉํ๋ ๋ฌธ์ ์์ ์ ์ถํ ์ ์๋ค.
์ ๋ ฅ ์์ 1์ ์ฒซ ๋ฒ์งธ case๋ฅผ ํ์ธํด ๋ณด์.
0 0 13 40 0 37
์ฒซ ๋ฒ์งธ ํฐ๋ ์ ์ขํ๊ฐ 0, 0์ด๊ณ ๋ง๋ฆฐ๊ณผ์ ๊ฑฐ๋ฆฌ๊ฐ 13์ด๋ฏ๋ก ๋ฐ์ง๋ฆ์ด 13์ธ ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ฒซ ๋ฒ์งธ ํฐ๋ ์ ๊ธฐ์ค์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์์ ๊ตฌ์ฑํ๋ฉด ์์ ๋๋ ์ ํด๋นํ๋ ๋ถ๋ถ๋ค์ด ๋ชจ๋ ๋ง๋ฆฐ์ด ์์ ์ ์๋ ๊ฒฝ์ฐ์ ์์ธ ๊ฒ์ด๋ค.
๋ ๋ฒ์งธ ํฐ๋ ๋ ๊ตฌ์ฑํด ๋ณด์. ๋ ๋ฒ์งธ ํฐ๋ ์ ์ขํ๊ฐ 40, 0์ด๊ณ ๋ง๋ฆฐ๊ณผ์ ๊ฑฐ๋ฆฌ๋ 37์ด๋ค.
๋ ๋ฒ์งธ ์์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋๋ค. ๊ทธ๋ผ ์ฒซ ๋ฒ์งธ ์์ ์๋ ์์น์ธ 0, 0์ ๋๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
๋ ์ ๊ฐ์ ๊ต์ ์ด ์ด 2๊ฐ๊ฐ ์๊ฒผ๋ค. ์ ๊ทธ๋ฆผ์ฒ๋ผ ๊ฐ ์์ ๋๋ ๊ฐ ๋ง๋ฆฐ์ด ์์ ์ ์๋ ๊ฒฝ์ฐ์ผ ๋ ๋ ์์ ๊ต์ ์ด ๋ช ๊ฐ์ธ์ง ์ ์ ์์ผ๋ฉด ์ ๋ต์ ๊ตฌํ ์ ์๋ค. ์ ๋ ฅ ์์ 1์ ์ฒซ ๋ฒ์งธ ํ ์คํธ ์ผ์ด์ค์ ์ ๋ต์ 2์ด๋ค.
์ด๋ฅผ ํตํด ๋ ์์ ๊ด๊ณ๋ฅผ ์ด์ฉํด ๊ต์ ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ฉด ๋๋ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ์์๋ค.
๋ ์์ ๊ต์ ์ ๊ฒฝ์ฐ์ ์๋ ์ด 4๊ฐ์ง๊ฐ ์๋ค.
๊ต์ ์ด 2๊ฐ์ธ ๊ฒฝ์ฐ, ๊ต์ ์ด 1๊ฐ์ธ ๊ฒฝ์ฐ, ๊ต์ ์ด ์๋ ๊ฒฝ์ฐ, ๊ต์ ์ด ๋ฌดํ๊ฐ์ธ ๊ฒฝ์ฐ์ด๋ค.
๊ฐ ๊ต์ ์ ๊ตฌํ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ 4๊ฐ์ ์ํฉ์ผ๋ก ๋๋ ์ ์ค๋ช ํ๊ฒ ๋ค.
<์ํฉ 1>
๋จผ์ ๊ต์ ์ด ๋ฌดํ๊ฐ์ธ ๊ฒฝ์ฐ๋ ์กฐ๊ธ๋ง ์๊ฐํด ๋ณด๋ฉด ๊ฐ ํฐ๋ ์์ ๋ง๋ฆฐ์ด ์๋ ๊ฒฝ์ฐ์ ์์ธ ์์ ๋๋ ๊ฐ ์ ํํ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ๋ฌดํ๋๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋๋ค.
๋ ์์ด ์ ํํ ๊ฒน์ณ์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ฆฐ์ด ์์ ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋ฌดํ๊ฐ๊ฐ ๋๋ ๊ฒ์ด๋ค.
์ด ๊ฒฝ์ฐ๋ฅผ ์ฒดํฌํ๊ธฐ ์ํด์๋ ๋ ํฐ๋ ์ ์ขํ๊ฐ ๊ฐ์์ผ ํ๊ณ ์ธก์ ํ ๋ง๋ฆฐ๊ณผ์ ๊ฑฐ๋ฆฌ๋ ์ผ์นํด์ผ ํ๋ค.
if (turret1X == turret2X && turret1Y == turret2Y && radius1 == radius2)
ํฐ๋ ์ ์ขํ, ๋ง๋ฆฐ๊ณผ์ ๊ฑฐ๋ฆฌ๊ฐ ๋ชจ๋ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ๋ง๋ฆฐ์ด ์์ ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋ฌดํ๊ฐ๊ฐ ๋๋ค.
<์ํฉ 2>
๋ ๋ฒ์งธ ์ํฉ์ ๋ ์์ ๊ต์ ์ ๊ฐ์๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ์ด๋ค.
์ด ๊ฒฝ์ฐ๋ 2๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด์ผ ํ๋ค. ์์ด ๋ด์ ํ๋ ๊ฒฝ์ฐ์ ์ธ์ ํ๋ ๊ฒฝ์ฐ์ด๋ค.
์ฒซ ๋ฒ์งธ๋ก ์ธ์ ํ๋ ๊ฒฝ์ฐ๋ถํฐ ํ์ธํด ๋ณด์.
์์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ต์ ์ด 1๊ฐ๋ง ์กด์ฌํ๋ค.
๋ ์์ด ์ธ์ ํ๋ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ์ฝ๋๋ก ์์ฑํด์ผ ํ ๊น?
๋ฐ๋ก ๋ ์์ ๋ฐ์ง๋ฆ์ ๊ธธ์ด์ ํฉ๊ณผ ๊ฐ ์์ ์ค์ฌ์ ์ขํ ๊ฐ์ ๊ฑฐ๋ฆฌ๊ฐ ์ผ์นํ๊ฒ ๋๋ฉด ๊ต์ ์ด 1๊ฐ๋ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋๋ค.
else if (distanceTurret == radiusPlus)
๋ ํฐ๋ ์ขํ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ distanceTurret์ด๋ผ๊ณ ํ๊ณ ๋ ์์ ๋ฐ์ง๋ฆ์ ํฉ์ radiusPlus๋ผ๊ณ ํ ๋ ๋ ๊ฐ์ด ์ผ์นํด์ผ ํ๋ค.
๋ ๋ฒ์งธ ๊ฒฝ์ฐ์๋ ์์ด ๋ด์ ํ๋ ๊ฒฝ์ฐ์ด๋ค. ์์ด ๋ด์ ํ๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ด ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ์ฝ๋๋ก ๋ํ๋ด์ผ ํ ๊น?
์ด ๊ฒฝ์ฐ์๋ ์ธ์ ๊ณผ ๋ฐ๋๋ก ์๊ฐํ๋ฉด ๋๋ค. ์์ ์ค์ฌ๋ค ๊ฐ์ ๊ฑฐ๋ฆฌ์ ๋ ์์ ๋ฐ์ง๋ฆ์ ์ฐจ๊ฐ ๊ฐ์ผ๋ฉด ๋ด์ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ฑ๋ฆฝ๋๋ค.
else if (radiusMinus == distanceTurret)
๋ ๋ฐ์ง๋ฆ์ ์ฐจ๋ฅผ radiusMinus๋ผ๊ณ ์ ์ํ๊ณ distanceTurret๊ณผ ๋น๊ตํ๋ค.
<์ํฉ 3>
3๋ฒ์งธ ์ํฉ์ ๋ ์์ ๊ต์ ์ด 0๊ฐ์ธ ๊ฒฝ์ฐ์ด๋ค. ์ด ๋๋ ๋ ์์ด ์๋ก ๋ง๋์ง ๋ชปํ๋ ๋ชจ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋ ์์ด ๋ง๋์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ์ด 2๊ฐ์ง๋ก ๋๋๋ค.
๊ทธ์ค ํ ๊ฐ์ง ์๋ฅผ ๋ณด์ฌ ์ฃผ์๋ฉด ์๋์ ๊ฐ๋ค.
์ ์ฌ์ง์ ๊ฒฝ์ฐ์๋ ๋ ์์ ์๋ก ๋ฐ์ ์์ผ๋ฉด์ ๋ง๋์ง ๋ชปํ๊ณ ์๋ค.
์ด ์ํฉ์ ์ธ์ ํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํ์ ๋์ ๋์ผํ ๊ณต์์ ์ฐ๋๋ฐ, ์กฐ๊ฑด 1๊ฐ๋ง ๋ฐ๊ฟ์ค๋ค.
๋ ์ค์ฌ ์ขํ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ ์์ ๋ฐ์ง๋ฆ์ ํฉ๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ง ์์ ๊ฐ์ ์ํฉ์ด ๋๋ค.
else if (distanceTurret > radiusPlus)
๋ ์์ด ์๋ก์ ๋ฐ๊นฅ์ ์์ผ๋ฉด์ ๋ง๋์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํ์ผ๋, ์ด์ ํ๋์ ์์ด ๋ค๋ฅธ ํฐ ์ ์์ ๋ค์ด๊ฐ ์์ง๋ง ๊ต์ ์ด ์๋ ๊ฒฝ์ฐ๋ ํ์ธํด ๋ด์ผ ํ๋ค.
์ด ๊ฒฝ์ฐ์๋ ์ธ์ ๊ณต์์ ๋์ผํ๊ฒ ์ด์ฉํ๋, ์กฐ๊ฑด์ ๋ฐ๊ฟ์ผ ํ๋ค.
๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ๋ ์์ ๋ฐ์ง๋ฆ์ ์ฐจ๋ณด๋ค ์์ ๊ฒฝ์ฐ์ด๋ค.
else if (radiusMinus > distanceTurret)
<์ํฉ 4>
์ด์ ๊ต์ ์ด 2๊ฐ์ธ ๊ฒฝ์ฐ์ ์๋ง ๋จ์๋ค. ์ฌ์ค ๊ต์ ์ด 2๊ฐ์ธ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์
์ง๊ธ๊น์ง ์์๋ ๋ชจ๋ ์ํฉ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ง์กฑํ์ง ์์ผ๋ฉด ๊ต์ ์ด 2๊ฐ์ธ ๊ฒฝ์ฐ๊ฐ ๋๋ค.
๊ต์ ์ด 2๊ฐ์ธ ๊ฒฝ์ฐ๋ ๋๋ฌด ๊ฒฝ์ฐ์ ์๊ฐ ๋ง์์ ์ ์ํฉ๋ค์ ์ ๋ถ ๋ง์กฑํ์ง ์์์ ๋๊ฐ ๊ต์ ์ด 2๊ฐ์ธ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ฒ๋ฆฌํด ์ฃผ๋ฉด ๋๋ค.
์์ธํ ์ ๋ณด๋ ๋ ์์ ์์น ๊ด๊ณ๋ฅผ ๊ฒ์ํด์ ๊ณต๋ถํด ๋ณด๊ฑฐ๋ ์๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ด์ฉํด์ ๊ณต๋ถํด ๋ณด์.
https://houseofj.tistory.com/167
๋ฌธ์ ํด๊ฒฐ ์ฝ๋
import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.math.abs
import kotlin.math.pow
import kotlin.math.sqrt
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val case = readLine().toInt()
for (i in 0 until case) {
val turret = readLine().split(" ").map { it.toDouble() }
val (turret1X, turret1Y, radius1) = turret.subList(0, 3)
val (turret2X, turret2Y, radius2) = turret.subList(3, 6)
// ํฐ๋ ์ ์ขํฌ๊ฐ ๊ฐ๊ณ ๋ฐ์ง๋ฆ์ ๊ธธ์ด๋ ๊ฐ์ผ๋ฉด ๋ง๋ฆฐ์ด ์๋ ๊ฒฝ์ฐ๋ ๋ฌดํ๋๊ฐ ๋จ.
if (turret1X == turret2X && turret1Y == turret2Y && radius1 == radius2) println(-1)
else {
// ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ.
val distanceX = turret1X - turret2X
val distanceY = turret1Y - turret2Y
val distanceTurret = sqrt(distanceX.pow(2) + distanceY.pow(2))
val radiusPlus = radius1 + radius2
val radiusMinus = abs(radius1 - radius2)
// ์ ์ ์ด 0๊ฐ์ธ ๊ฒฝ์ฐ: ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ๋ ์์ ๋ฐ์ง๋ฆ์ ๊ธธ์ด์ ํฉ๋ณด๋ค ํด ๋, ๋๋ ๋ ๋ฐ์ง๋ฆ์ ์ฐจ๊ฐ ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ณด๋ค ํด ๋
if (distanceTurret > radiusPlus || radiusMinus > distanceTurret) println(0)
// ์ ์ ์ด 1๊ฐ์ธ ๊ฒฝ์ฐ: ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ๋ ์์ ๋ฐ์ง๋ฆ์ ํฉ๊ณผ ๊ฐ์ ๋, ๋๋ ๋ ๋ฐ์ง๋ฆ์ ์ฐจ๊ฐ ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ๊ฐ์ ๋
else if (distanceTurret == radiusPlus || radiusMinus == distanceTurret) println(1)
// ์ ์ ์ด 2๊ฐ์ธ ๊ฒฝ์ฐ: ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ๋ ์์ ๋ฐ์ง๋ฆ์ ํฉ๋ณด๋ค ์์ ๋
else println(2)
}
}
}
๋ฌธ์ ํ์ด
ํฐ๋ 2๊ฐ์ ์ขํ์ ๊ฐ ํฐ๋ ์ด ์ธก์ ํ ๋ง๋ฆฐ๊ณผ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
ํฐ๋ ์ ์ขํ์ ๋ง๋ฆฐ๊ณผ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ฉํด ์์ ๊ตฌ์ฑํ๊ณ ๋ ์ขํ ๊ฐ์ ๊ฑฐ๋ฆฌ์ ๋ ํฐ๋ ์ด ์ธก์ ํ ๋ง๋ฆฐ๊ณผ์ ๊ฑฐ๋ฆฌ์ ํฉ๊ณผ ์ฐจ๋ฅผ ๊ฐ๊ฐ ์ ์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ ์ํฉ์ ๋ง๋๋ก ์กฐ๊ฑด์ ์์ฑํด์ ๊ต์ ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํด ์ฃผ๋ฉด ๋๋ค.
๋ฌธ์ ํด๊ฒฐ ๊ณผ์
๋ ์์ ์์น ๊ด๊ณ๋ฅผ ์ด์ฉํด์ผ ํ๋ ๋ฌธ์ ์ด๋ค.
์ํ์ ๊ณต๋ถํ๊ณ ์๋ ํ์๋ค์๊ฒ๋ ์ค๋ฒ ์ดํ์ ๋ฌธ์ ๊ฐ ๋๊ฒ ์ง๋ง, ๋ ๊ฐ์(?) ์ฌ๋๋ค์ ๋ฌธ์ ์ดํด๋ถํฐ ํ๊ฒจ์ํ ๊ฒ์ด๋ค.
๋ ์์ ์์น ๊ด๊ณ๋ฅผ ํ์ ํ์ง ๋ชปํ๋ฉด ์ ๋ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
๋ ์์ ๊ต์ ์ด ๋ช ๊ฐ์ธ์ง์ ์กฐ๊ฑด์ ์ ํํ๊ฒ ๋ช ์ํด์ผ ํ๋ค.
๊ต์ ์ด ์๋ ๊ฒฝ์ฐ์ 1๊ฐ์ธ ๊ฒฝ์ฐ๋ ์ฑ๋ฆฝ๋๋ ์กฐ๊ฑด์ด 2๊ฐ์ง์ฉ ์๋ค๋ ๊ฒ์ ๋ช ์ฌํ์.
๋ํ ์ ์๋ก ์ ๋ ฅ์ ๋ฐ์ง๋ง ์ ๊ณฑ๊ทผ๊ณผ ์ ๊ณฑ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์์์ ์ฐจ์ด๋ก ์ค๋ต์ด ๋๊ธฐ ์ฝ๋ค. ๋ด ๊ฒฝ์ฐ์๋ 25%์์ ํ๋ฆฌ๋๋ผ.
sqrt()๋ฅผ ์ฌ์ฉํ๋๋ฐ ํ๋ ธ๋ค๊ณ ๋จ๋ฉด sqrt๋ฅผ ์ง์ฐ๊ณ pow๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์.
'๐ฏ | ๋ฐฑ์ค > ๐ | Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin, S1] ๋ฐฑ์ค 1991๋ฒ ํธ๋ฆฌ ์ํ (0) | 2024.08.21 |
---|---|
[Kotlin, S3] ๋ฐฑ์ค 1904๋ฒ 01ํ์ผ (0) | 2024.08.20 |
[Kotlin, S3] ๋ฐฑ์ค 1004๋ฒ ์ด๋ฆฐ ์์ (0) | 2024.08.19 |
[Kotlin, S3] ๋ฐฑ์ค 2346๋ฒ ํ์ ํฐ๋จ๋ฆฌ๊ธฐ (0) | 2024.08.19 |
[Kotlin, S5] ๋ฐฑ์ค 30010๋ฒ ์๋ชป๋ ๋ฒ๋ธ์ ๋ ฌ (0) | 2024.08.17 |