const val X = 0
const val Y = 1
fun main() {
val (x1, y1) = readLine()!!.split(" ").map { it.toInt() }
val (x2, y2) = readLine()!!.split(" ").map { it.toInt() }
val (x3, y3) = readLine()!!.split(" ").map { it.toInt() }
val dy12 = y2 - y1 // 점1 → 점2의 y 변화량 (분자1)
val dx12 = x2 - x1 // 점1 → 점2의 x 변화량 (분모1)
val dy13 = y3 - y1 // 점1 → 점3의 y 변화량 (분자2)
val dx13 = x3 - x1 // 점1 → 점3의 x 변화량 (분모2)
/*
dy12 / dx12 == dy13 / dx13
dy12 * dx13 == dy13 * dx12
*/
println(if (dy12 * dx13 == dy13 * dx12) "YES" else "NO")
}사실상 수학 문제다. 얼마나 구현을 잘 하는지보다는, 출제자가 놓은 함정이 무엇인지 파악해야만 풀 수 있다. 그건 바로 컴퓨터의 계산에서 발생하는 오차를 피하는 것이다. 문제의 입력에서는 모든 점이 정수로 주어졌다. 그걸 재료로 구현 코드를 써내려가다보면, 타입 추론 (Type Inference)에 의해 기울기 값을 Int형으로 두는 등의 참사가 발생하고 만다.
그렇다고 기울기를 Float로 둔다고 해결될까? 아니다. 아주 사소한 오차로도 테스트 케이스를 통과할 순 없기 때문이다. 그렇다면 어떻게 해야하는가? 애초에 나눗셈을 피해가면 된다.
'문제 풀이 ✏️ > 기타' 카테고리의 다른 글
| [구름] 175194 (구름 스퀘어) (0) | 2026.07.05 |
|---|---|
| [백준] 11724 (연결 요소의 개수) (0) | 2025.03.18 |
| [백준] 15829 (Hashing) (0) | 2024.11.17 |
| [백준] 11047 (동전 0) (1) | 2024.11.11 |
| [백준] 1931 (회의실 배정) (0) | 2024.10.30 |