내가 푼 풀이

- 두 원이 주어졌을때 교차하는 경우의수를 알고 있으면 된다.

- 두 원과의 거리를 dist, 각각 원의 반지름을 r1 ,r2라고 할때

 

d

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

+ Recent posts