https://www.acmicpc.net/problem/1002
풀이
더보기
풀이
원의 외접과 내접을 이용한다.
일단 두 점 사이의 거리를 구하고,
해당 사이트의 원의 외-내접 특성에 따라 다중 조건문을 걸어 해결한다.
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로 자료형 캐스팅 해서 썼더니 소수점이 사라지면서 부동소수점 문제로 문제를 스치게 되는거였다 ㅁㅊ
반응형
'스터디(beakjoon)' 카테고리의 다른 글
Kotlin] 백준 2557번 문제 풀이 (0) | 2023.03.07 |
---|---|
Kotlin] 백준 1004번 문제 풀이 (0) | 2023.01.18 |
Kotlin] 백준 1003번 문제풀이 (0) | 2023.01.17 |
Kotlin] 백준 1001번 문제 풀이 (0) | 2023.01.16 |
Kotlin] 백준 1000번 문제 풀이 (0) | 2023.01.16 |