백준 1002번: 터렛(Swift)

https://www.acmicpc.net/problem/1002

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

두 원의 외접, 내접, 한점에서 만나는 경우를 푸는 알고리즘. 문제만 이해하면 쉽게 풀 수 있다. 중학생때 배웠던것 같기도 하고..

import Foundation

var cicleNum = Double(readLine()!)!

for _ in 1...Int(cicleNum){
    var coordinate = readLine()?.split(separator: " ").map{Int($0)!}
    var x = (coordinate![3]-coordinate![0])*(coordinate![3]-coordinate![0])
    var y = (coordinate![4]-coordinate![1])*(coordinate![4]-coordinate![1])
    var joAndRewDistance = x+y
    var x1 = coordinate![0]
    var y1 = coordinate![1]
    var r1 = coordinate![2]
    var x2 = coordinate![3]
    var y2 = coordinate![4]
    var r2 = coordinate![5]
    
    
    
    if x1 == x2 && y1 == y2 && r1 == r2 {
        print(-1)
    }else if joAndRewDistance > (r1+r2)*(r1+r2){
        print(0)
    }else if joAndRewDistance < (r2-r1)*(r2-r1){
        print(0)
    }else if joAndRewDistance == (r2-r1)*(r2-r1){
        print(1)
    }else if joAndRewDistance == (r2+r1)*(r2+r1){
        print(1)
    }else{
        print(2)
    }
}