๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ฏ | ๋ฐฑ์ค€/๐Ÿ™‚ | Silver

[Kotlin, S3] ๋ฐฑ์ค€ 1004๋ฒˆ ์–ด๋ฆฐ ์™•์ž

by immgga 2024. 8. 19.

์ถœ์ฒ˜: unsplash.com

 

์–ด๋ฆฐ ์™•์ž(1004๋ฒˆ)

Silver 3

#์ˆ˜ํ•™ #๊ธฐํ•˜ํ•™

 

๋ฌธ์ œ ๋‚ด์šฉ

 

 

๋ฌธ์ œ ์ ‘๊ทผ

์‹œ์ž‘ ์ขŒํ‘œ์™€ ๋ ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ํ–‰์„ฑ๊ณ„์˜ ์ค‘์‹ฌ ์ขŒํ‘œ์™€ ํ–‰์„ฑ๊ณ„์˜ ๋ฐ˜์ง€๋ฆ„์ด ์ฃผ์–ด์งˆ ๋•Œ, ์‹œ์ž‘ ์ขŒํ‘œ์—์„œ ๋ ์ขŒํ‘œ๋กœ ์ด๋™ํ•˜๋ฉด์„œ ์ง„์ž… ๋˜๋Š” ์ดํƒˆํ•˜๋Š” ํ–‰์„ฑ๊ณ„์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

ํ–‰์„ฑ๊ณ„๋Š” ๋ฐ˜์ง€๋ฆ„๊ณผ ์ค‘์‹ฌ ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์‹œ์ž‘ ์ขŒํ‘œ์™€ ํ–‰์„ฑ๊ณ„์˜ ์ค‘์‹ฌ์ขŒํ‘œ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ์™€ ๋ ์ขŒํ‘œ์™€ ํ–‰์„ฑ๊ณ„์˜ ์ค‘์‹ฌ ์ขŒํ‘œ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ํ•ด๋‹น ํ–‰์„ฑ๊ณ„๋ฅผ ๋ฌด์กฐ๊ฑด ์ง€๋‚˜์•ผ ํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ์•ˆ ์ง€๋‚˜๊ฐ€๋„ ์ƒ๊ด€์—†๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

์‹œ์ž‘ ์ขŒํ‘œ์™€ ํ–‰์„ฑ๊ณ„์˜ ์ค‘์‹ฌ ์ขŒํ‘œ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ distanceStart, ๋ ์ขŒํ‘œ์™€ ํ–‰์„ฑ๊ณ„์˜ ์ค‘์‹ฌ ์ขŒํ‘œ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ distanceEnd๋ผ๊ณ  ํ•  ๋•Œ

ํ–‰์„ฑ๊ณ„์™€ ์‹œ์ž‘, ๋ ์ขŒํ‘œ ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ 3๊ฐ€์ง€๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.

 

<์ƒํ™ฉ 1>

distanceStart์™€ distanceEnd๊ฐ€ ํ–‰์„ฑ๊ณ„์˜ ๋ฐ˜์ง€๋ฆ„๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ˜•ํƒœ๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.

์‚ฌ์ง„ 1-1

distanceEnd, distanceStart๊ฐ€ ํ–‰์„ฑ๊ณ„์˜ ๋ฐ˜์ง€๋ฆ„์ธ r๋ณด๋‹ค ๊ธธ๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋ถ„ํžˆ ํ–‰์„ฑ๊ณ„์˜ ์ง„์ž…์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

<์ƒํ™ฉ 2>

distanceStart ๋˜๋Š” distanceEnd๊ฐ€ ํ–‰์„ฑ๊ณ„์˜ ๋ฐ˜์ง€๋ฆ„๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์ง„ 1-2, ds: distanceStart, de: distanceEnd

์œ„ ์‚ฌ์ง„์—์„œ๋Š” distanceStart๊ฐ€ ํ–‰์„ฑ๊ณ„์˜ ๋ฐ˜์ง€๋ฆ„๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. start์˜ ์ขŒํ‘œ๊ฐ€ ํ–‰์„ฑ๊ณ„ ๋‚ด๋ถ€์— ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

start์—์„œ end๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฌด์กฐ๊ฑด ํ–‰์„ฑ๊ณ„๋ฅผ ์ดํƒˆํ•ด์•ผ ํ•œ๋‹ค.

 

 

<์ƒํ™ฉ 3>

distanceStart์™€ distanceEnd๊ฐ€ ๋ชจ๋‘ ํ–‰์„ฑ๊ณ„์˜ ๋ฐ˜์ง€๋ฆ„๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ๋‚˜์˜จ๋‹ค.

์‚ฌ์ง„ 1-3

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์— ํ•ด๋‹นํ•œ๋‹ค. ํ–‰์„ฑ๊ณ„ ์ง„์ž…/์ดํƒˆ ์นด์šดํŠธ๋ฅผ ๋Š˜๋ฆฐ๋‹ค.

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

์—ญ์‹œ ๋ฌธ์ œ ์ดํ•ด๊ฐ€ ์ข€ ์–ด๋ ต๋‹ค.

์‚ฌ์‹ค ํฌ์ŠคํŒ…์„ ์ ๊ธฐ ์ „๊นŒ์ง€๋งŒ ํ•ด๋„ ๋ฌธ์ œ ์ดํ•ด๋ฅผ ๋œํ•œ ์ƒํƒœ๋กœ ํ’€์—ˆ๋Š”๋ฐ, ์ง์ ‘ ๊ทธ๋ ค๊ฐ€๋ฉด์„œ ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋‹ˆ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋‘ ์ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ์™€ ํ–‰์„ฑ๊ณ„์˜ ๋ฐ˜์ง€๋ฆ„์˜ ๊ธธ์ด ๊ฐ„์˜ ๋Œ€์†Œ ๋น„๊ต๋ฅผ ์ด์šฉํ•ด ์ƒํ™ฉ ์œ ์ถ” ํ›„ ํ–‰์„ฑ๊ณ„ ์ง„์ž…/์ดํƒˆ ํšŸ์ˆ˜๋ฅผ ์„ธ์ค˜์•ผ ํ•œ๋‹ค.

 

๊ทธ๋ฆผ์ด ๊ฝค ๋ณต์žกํ•ด์„œ ์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ฒŒ ๋˜๋ฉด ์–ด๋ฆฌ๋‘ฅ์ ˆํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์นจ์ž‘ํ•˜๊ฒŒ ๋ฌธ์ œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•ด ๋ณด์ž.

๊ฒฐ๋ก ์€ ์ดํ•ดํ•˜๋ฉด ์‰ฌ์šด ๋ฌธ์ œ.

728x90