내가 푼 풀이
- 두 원이 주어졌을때 교차하는 경우의수를 알고 있으면 된다.
- 두 원과의 거리를 dist, 각각 원의 반지름을 r1 ,r2라고 할때
1. dist > r1 + r2 : 원이 서로 만나지 않는 경우
2. dist = r1 + r2: 두 원이 교차하는 점이 한개 인 경우
3. dist < r1 + r2, dist > |r1 - r2| : 두 원이 교차하여 접점이 두개인 경우
-> 원이 교차하는 시점부터는 모든 경우의 수는 dist < r1 + r2가 성립하므로 반지름의 차로 경우의수를 구해야한다.
4. dist < r1 + r2 , dist == |r1 - r2|: 한개의 작은 원이 큰원 안에 들어가있고 접점이 한개인 경우
5. dist < r1 + r2 , dist < |r1 - r2|: 원이 내부에 있지만, 접점이 없는 경우
6. dist == 0, r1 == r2: 두 원이 일치하는경우
--> 위의 6가지 경우의수를 코드로 구현하면 된다.
import Foundation
let T = Int(readLine()!)!
for i in 0..<T {
let arr = readLine()!.split(separator: " ").map{Double(String($0))!}
let x1: Double = arr[0], y1 = arr[1], dist1 = arr[2]
let x2: Double = arr[3], y2 = arr[4], dist2 = arr[5]
var totalDist: Double {
return sqrt(pow((abs(x1 - x2)), 2) + pow(abs(y1 - y2), 2))
}
if totalDist == 0 && dist1 == dist2{
print(-1)
continue
}
if totalDist > dist1 + dist2 {
print(0)
} else if totalDist == dist1 + dist2 {
print(1)
} else if totalDist < dist1 + dist2 {
if totalDist > abs(dist1 - dist2) {
print(2)
} else if totalDist == abs(dist1 - dist2) {
print(1)
} else {
print(0)
}
}
}
원의 성질 사진 출처:
https://kg-m-s-a-k-mol-cd.tistory.com/242
'코딩테스트 > 백준' 카테고리의 다른 글
BOJ-1654 랜선 자르기 Swift (0) | 2024.04.05 |
---|---|
BOJ-1920 수 찾기 Swift (0) | 2024.04.05 |
BOJ-11286 절댓값 힙 Swift (0) | 2024.04.04 |
BOJ-11279 최대 힙 Swift (0) | 2024.04.04 |
BOJ-28279 덱 2 Swift (0) | 2024.04.03 |