본문 바로가기
Algorithm/문제풀이_백준

Swift) 백준 1002번 (터렛)

by Joahnee 2021. 8. 16.

요구능력 : 원의 성질에 대해 알고 있느냐

 

코드설명 : 

원의 내접, 외접, 접하지않는것을 이용하여 조건을 만들었다.

변수 r의 경우 두 원의 거리를 구한것이다.(중심을 기준)

 

 

후기 : 솔직히 원의 성질알아도 처음 문제보고 딱 생각해내는 사람이 얼마나 있겟느냐마는...

원으로 접근하면 그닥 어려운 문제는 아닌것같다.

원으로 접근할 수 있는 근거를 들어보자면 각각 두개의 좌표와 반지름을 주고,

두 좌표에서 주어진 거리만큼 떨어져 있는 위치에 몇개가 있을 수 있는지를 찾아야된다는 것이다.

 

let T = Int(readLine()!)!
for _ in 1...T {
    let arr = readLine()!.split(separator: " ").map{ Int($0)! }
    var r1 = arr[2]
    var r2 = arr[5]
    let r = ((arr[0] - arr[3]) * (arr[0] - arr[3])) + ((arr[1] - arr[4]) * (arr[1] - arr[4]))
    
    if r2 > r1 {
        let temp = r1
        r1 = r2
        r2 = temp
    }
    
    
    if r1 == r2 && r == 0 {
        print("-1")
    }else if (r1 - r2) * (r1 - r2) > r || (r1 + r2) * (r1 + r2) < r  {
        print("0")
    }else if (r1 + r2) * (r1 + r2) == r || r  == (r1 - r2) * (r1 - r2) {
        print("1")
    }else {
        print("2")
    }
}

댓글