https://www.acmicpc.net/problem/1004
1004번: 어린 왕자
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주
www.acmicpc.net
제출한 코드
import Foundation
let t = Int(readLine()!)!
for _ in 0..<t {
let xy = readLine()!.components(separatedBy: " ").map({ Int($0) ?? 0 })
let x1 = xy[0], y1 = xy[1], x2 = xy[2], y2 = xy[3]
let n = Int(readLine()!)!
var cnt = 0
for _ in 0..<n {
let xyr = readLine()!.components(separatedBy: " ").map({ Int($0) ?? 0 })
let x = xyr[0], y = xyr[1], r = xyr[2]
let dis1 = (x1-x) * (x1-x) + (y1-y) * (y1-y)
let dis2 = (x2-x) * (x2-x) + (y2-y) * (y2-y)
let radius = r * r
if dis1 < radius && dis2 < radius {
continue
}
if dis1 < radius {
cnt += 1
}
if dis2 < radius {
cnt += 1
}
}
print(cnt)
}
x1, y1 혹은 x2, y2와 현재 좌표 x, y의 거리가 반지름보다 작다면 해당 원을 통과해야 하므로 cnt += 1 해줘야 한다.
하지만 이때 주의해야 하는 경우는
x1, y1과 x2, y2가 현재 원 안에 갇힌 경우는 거리가 반지름보다 작지만 cnt에 포함하지 않아야 한다.
따라서 x1, y1와의 거리도 반지름보다 작고, x2, y2와의 거리도 반지름 보다 작다면
해당 원을 계산을 진행하지 않는다.
수학문제 같은 느낌 ~~...
'Algorithm > BOJ' 카테고리의 다른 글
[코테] 신입 사원 (0) | 2024.03.09 |
---|---|
[코테] 회의실 배정 (0) | 2024.03.09 |
[코테] 동전 (0) | 2024.03.08 |
[코테] 평범한 배낭 (1) | 2024.03.08 |
[코테] 포도주 시식 (0) | 2024.03.06 |