์ด๋ฆฐ ์์(1004๋ฒ)
Silver 3
#์ํ #๊ธฐํํ
๋ฌธ์ ๋ด์ฉ
๋ฌธ์ ์ ๊ทผ
์์ ์ขํ์ ๋ ์ขํ๊ฐ ์ฃผ์ด์ง๊ณ , ํ์ฑ๊ณ์ ์ค์ฌ ์ขํ์ ํ์ฑ๊ณ์ ๋ฐ์ง๋ฆ์ด ์ฃผ์ด์ง ๋, ์์ ์ขํ์์ ๋ ์ขํ๋ก ์ด๋ํ๋ฉด์ ์ง์ ๋๋ ์ดํํ๋ ํ์ฑ๊ณ์ ๊ฐ์๋ฅผ ๊ตฌํด์ผ ํ๋ค.
ํ์ฑ๊ณ๋ ๋ฐ์ง๋ฆ๊ณผ ์ค์ฌ ์ขํ๊ฐ ์ฃผ์ด์ง๋ค. ์์ ์ขํ์ ํ์ฑ๊ณ์ ์ค์ฌ์ขํ ๊ฐ์ ๊ฑฐ๋ฆฌ์ ๋ ์ขํ์ ํ์ฑ๊ณ์ ์ค์ฌ ์ขํ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ฉํด ํด๋น ํ์ฑ๊ณ๋ฅผ ๋ฌด์กฐ๊ฑด ์ง๋์ผ ํ๋์ง ์๋๋ฉด ์ ์ง๋๊ฐ๋ ์๊ด์๋์ง ์ ์ ์๋ค.
์์ ์ขํ์ ํ์ฑ๊ณ์ ์ค์ฌ ์ขํ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ distanceStart, ๋ ์ขํ์ ํ์ฑ๊ณ์ ์ค์ฌ ์ขํ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ distanceEnd๋ผ๊ณ ํ ๋
ํ์ฑ๊ณ์ ์์, ๋ ์ขํ ๊ฐ์ ๊ด๊ณ๊ฐ 3๊ฐ์ง๊ฐ ๋์ฌ ๊ฒ์ด๋ค.
<์ํฉ 1>
distanceStart์ distanceEnd๊ฐ ํ์ฑ๊ณ์ ๋ฐ์ง๋ฆ๋ณด๋ค ํฌ๋ค๋ฉด ์๋์ ๊ฐ์ด ํํ๊ฐ ๋์ฌ ๊ฒ์ด๋ค.
distanceEnd, distanceStart๊ฐ ํ์ฑ๊ณ์ ๋ฐ์ง๋ฆ์ธ r๋ณด๋ค ๊ธธ๊ธฐ ๋๋ฌธ์ ์ถฉ๋ถํ ํ์ฑ๊ณ์ ์ง์ ์ ํผํ ์ ์๋ค.
<์ํฉ 2>
distanceStart ๋๋ distanceEnd๊ฐ ํ์ฑ๊ณ์ ๋ฐ์ง๋ฆ๋ณด๋ค ์๋ค๋ฉด ์๋์ ๊ฐ์ ํํ๊ฐ ๋์ฌ ์ ์๋ค.
์ ์ฌ์ง์์๋ distanceStart๊ฐ ํ์ฑ๊ณ์ ๋ฐ์ง๋ฆ๋ณด๋ค ์์ ๊ฒฝ์ฐ๋ฅผ ๋ํ๋ธ ๊ฒ์ด๋ค. start์ ์ขํ๊ฐ ํ์ฑ๊ณ ๋ด๋ถ์ ์กด์ฌํ๊ฒ ๋๋ค.
start์์ end๋ก ์ด๋ํ๊ธฐ ์ํด์๋ ๋ฌด์กฐ๊ฑด ํ์ฑ๊ณ๋ฅผ ์ดํํด์ผ ํ๋ค.
<์ํฉ 3>
distanceStart์ distanceEnd๊ฐ ๋ชจ๋ ํ์ฑ๊ณ์ ๋ฐ์ง๋ฆ๋ณด๋ค ์์ ๊ฒฝ์ฐ์๋ ์๋์ ๊ฐ์ ํํ๊ฐ ๋์จ๋ค.
distanceStart, distanceEnd๊ฐ ๋ชจ๋ ํ์ฑ๊ณ์ ๋ฐ์ง๋ฆ๋ณด๋ค ์๋ค. ์ด ๊ฒฝ์ฐ์๋ ์์ ์ขํ์ ๋ ์ขํ๊ฐ ๋ชจ๋ ํ ํ์ฑ๊ณ ๋ด๋ถ์ ์กด์ฌํ๋ค.
ํ์ฑ๊ณ ๋ด๋ถ์ ๋ ์ขํ๊ฐ ์์ง๋ง start์์ end๋ก ์ด๋ํ๊ธฐ ์ํด ๊ตณ์ด ํ์ฑ๊ณ๋ฅผ ๋น ์ ธ๋์์ end๋ก ํฅํ ์ด์ ๊ฐ ์๋ค. ๊ทธ๋์ ์ด ๊ฒฝ์ฐ๋ ํ์ฑ๊ณ ์ง์ , ์ดํ ๋ชจ๋ ์๋ ๊ฒฝ์ฐ์ด๋ค.
๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ๊ณต์์ผ๋ก distanceStart, distanceEnd๋ฅผ ๊ตฌํ๊ณ , distanceStart, distanceEnd์ ํ์ฑ๊ณ์ ๋ฐ์ง๋ฆ ๊ฐ์ ๋์ ๊ด๊ณ๋ฅผ ์ ๋น๊ตํด์ ์ํฉ 2์ธ ๊ฒฝ์ฐ์๋ง ํ์ฑ๊ณ ์ง์ /์ดํ ์นด์ดํธ๋ฅผ ๋๋ ค ์ฃผ๋ฉด ๋๋ค.
๋ฌธ์ ํด๊ฒฐ ์ฝ๋
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()
val resultSb = StringBuilder()
for (i in 0 until case) {
val (startX, startY, endX, endY) = readLine().split(" ").map { it.toInt() }
val planetCnt = readLine().toInt()
var entryAndExit = 0
for (j in 0 until planetCnt) {
val (centerX, centerY, radius) = readLine().split(" ").map { it.toInt() }
val distanceStartX = abs(startX - centerX).toDouble()
val distanceStartY = abs(startY - centerY).toDouble()
val distanceStart = sqrt(distanceStartX.pow(2) + distanceStartY.pow(2))
val distanceEndX = abs(endX - centerX).toDouble()
val distanceEndY = abs(endY - centerY).toDouble()
val distanceEnd = sqrt(distanceEndX.pow(2) + distanceEndY.pow(2))
if (distanceStart <= radius && distanceEnd <= radius) {
continue
} else if (distanceStart <= radius || distanceEnd <= radius) {
entryAndExit++
}
}
resultSb.append("$entryAndExit\n")
}
println(resultSb)
}
๋ฌธ์ ํ์ด
์์ ์ขํ๋ฅผ startX, startY๋ก ๋ฐ๊ณ ๋ ์ขํ๋ฅผ endX, endY๋ก ๋ฐ์์ค๋ค.
ํ์ฑ๊ณ์ ์ค์ฌ์ขํ๋ centerX, centerY๋ก ๋ฐ์์ฃผ๊ณ , ๋ฐ์ง๋ฆ์ radius๋ก ๋ฐ๋๋ค.
start ์ขํ์ center ์ขํ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ distanceStart์ ์ ์ฅํ๊ณ , end ์ขํ์ center ์ขํ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ distanceEnd๋ก ์ ์ฅํ๋ค.
์ด์ distanceStart์ distanceEnd๊ฐ ๋ชจ๋ radius๋ณด๋ค ์์ ๊ฒฝ์ฐ์๋ ์ํฉ 3์ ํด๋นํ๋ค. continue๋ก ๋์ด๊ฐ๋ค.
distanceStart ๋๋ distanceEnd๊ฐ radius๋ณด๋ค ์์ ๊ฒฝ์ฐ์๋ ์ํฉ 2์ ํด๋นํ๋ค. ํ์ฑ๊ณ ์ง์ /์ดํ ์นด์ดํธ๋ฅผ ๋๋ฆฐ๋ค.
๋ฌธ์ ํด๊ฒฐ ๊ณผ์
์ญ์ ๋ฌธ์ ์ดํด๊ฐ ์ข ์ด๋ ต๋ค.
์ฌ์ค ํฌ์คํ ์ ์ ๊ธฐ ์ ๊น์ง๋ง ํด๋ ๋ฌธ์ ์ดํด๋ฅผ ๋ํ ์ํ๋ก ํ์๋๋ฐ, ์ง์ ๊ทธ๋ ค๊ฐ๋ฉด์ ํฌ์คํ ์ ์์ฑํ๋ค ๋ณด๋ ์๋ฒฝํ๊ฒ ์ดํดํ ์ ์์๋ค.
๋ ์ ๊ฐ์ ๊ฑฐ๋ฆฌ์ ํ์ฑ๊ณ์ ๋ฐ์ง๋ฆ์ ๊ธธ์ด ๊ฐ์ ๋์ ๋น๊ต๋ฅผ ์ด์ฉํด ์ํฉ ์ ์ถ ํ ํ์ฑ๊ณ ์ง์ /์ดํ ํ์๋ฅผ ์ธ์ค์ผ ํ๋ค.
๊ทธ๋ฆผ์ด ๊ฝค ๋ณต์กํด์ ์ฒ์ ๋ฌธ์ ๋ฅผ ๋ณด๊ฒ ๋๋ฉด ์ด๋ฆฌ๋ฅ์ ํ ์๋ ์๋ค. ์นจ์ํ๊ฒ ๋ฌธ์ ๋ฅผ ์ฝ์ผ๋ฉด์ ๋ฌธ์ ๋ฅผ ์ดํดํด ๋ณด์.
๊ฒฐ๋ก ์ ์ดํดํ๋ฉด ์ฌ์ด ๋ฌธ์ .
'๐ฏ | ๋ฐฑ์ค > ๐ | Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kotlin, S3] ๋ฐฑ์ค 1904๋ฒ 01ํ์ผ (0) | 2024.08.20 |
---|---|
[Kotlin, S3] ๋ฐฑ์ค 1002๋ฒ ํฐ๋ (0) | 2024.08.20 |
[Kotlin, S3] ๋ฐฑ์ค 2346๋ฒ ํ์ ํฐ๋จ๋ฆฌ๊ธฐ (0) | 2024.08.19 |
[Kotlin, S5] ๋ฐฑ์ค 30010๋ฒ ์๋ชป๋ ๋ฒ๋ธ์ ๋ ฌ (0) | 2024.08.17 |
[Kotlin, S5] ๋ฐฑ์ค 1813๋ฒ ๋ ผ๋ฆฌํ ๊ต์ (0) | 2024.08.16 |