본문 바로가기
스터디(beakjoon)

Kotlin] 백준 1002번 문제풀이

by 김마리님 2023. 1. 16.

https://www.acmicpc.net/problem/1002

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

 

풀이

더보기

 

풀이

 

원의 외접과 내접을 이용한다.

https://mathbang.net/101

 

두 원의 위치관계, 내접, 외접

위치관계 또 나오네요. 이번에는 두 원의 위치관계에요. 위치관계 마지막이니까 정신 바짝 차리고 따라오세요. 원과 직선의 위치관계, 원의 할선과 접선, 접점에서 했던 것처럼 두 원이 어떤 관

mathbang.net

 

일단 두 점 사이의 거리를 구하고,

해당 사이트의 원의 외-내접 특성에 따라 다중 조건문을 걸어 해결한다. 

 

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.*
import kotlin.collections.ArrayList
import kotlin.math.abs
import kotlin.math.pow
import kotlin.math.sqrt

fun main(args: Array<String>) {
    question1002()
}

fun question1002() {

    var reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))
    var count = reader.readLine().toString().toInt()
    var bufferCount = 0

    var arrayList = ArrayList<Int>()

    while(bufferCount < count) {
        var turret = reader.readLine().toString()
        var array = turret.split(" ")

        var xLength = (array[0].toInt() - array[3].toInt()).toDouble()
        var yLength = (array[1].toInt() - array[4].toInt()).toDouble()
        var duration = sqrt((xLength.pow(2.0)) + (yLength.pow(2.0)))

        var jLength = array[2].toDouble()
        var bLength = array[5].toDouble()

        //두 점에서 만나는 경우
        if(jLength + bLength > duration && abs(jLength - bLength) < duration) {
            arrayList.add(bufferCount, 2)
            println(2)
            // 한 점에서 만나는 경우
        } else if(duration!= 0.0 && (jLength + bLength == duration|| abs(jLength - bLength) == duration)) {
            arrayList.add(bufferCount, 1)
            println(1)
            // 같은 원일경우
        } else if(duration == 0.0 && jLength == bLength) {
            arrayList.add(bufferCount, -1)
            println(-1)
        } else {
            // 만나지 않는 경우
            arrayList.add(bufferCount, 0)
            println(0)
        }

        bufferCount ++
    }

}

 

++) 초기에 왜 틀렸나 가만 보니 Double을 다 toInt로 자료형 캐스팅 해서 썼더니 소수점이 사라지면서 부동소수점 문제로 문제를 스치게 되는거였다 ㅁㅊ

 

반응형