상상쓰

[백준] 터렛 본문

Coding Test

[백준] 터렛

상상쓰 2021. 8. 17. 17:12

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

 

1002번: 터렛

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

www.acmicpc.net

 

원과 원이 만나는 경우를 생각하면 된다.

 

1) 원과 원이 만나는 점이 무수히 많을 때 : 두 원의 중심과 반지름의 길이가 같아야 한다.

2) 원과 원이 만나는 점이 두 개일 때

3) 원과 원이 만나는 점이 한 개일 때

4) 원과 원이 만나는 점이 하나도 없을 때

 

인 경우가 존재한다. 즉, -1, 2, 1, 0 에서 적절한 답을 answer 에 담아 출력하면 된다. 원을 그려보면 아래의 부등식을 쉽게 이해할 수 있다.

 

2) : |r2 - r1| < d < r1 + r2

3) : |r2 - r1| > d 또는 r1 + r2 < d

4) : |r2 - r1| == d 또는 r1 + r2 == d

* d 는 원의 중심 간의 거리 

 

import sys

T = int(sys.stdin.readline())
answer = []

for i in range(T):
    x1, y1, r1, x2, y2, r2 = map(int, sys.stdin.readline().split())
    
    if x1 == x2 and y1 == y2:
        answer.append(-1 if r1 == r2 else 0)
    else:
        d = (x2 - x1)**2 + (y2 - y1)**2
        sr = (r2 + r1)**2
        mr = (r2 - r1)**2
        
        if mr > d or sr < d:
            answer.append(0)
        elif mr == d or sr == d:
            answer.append(1)
        else:
            answer.append(2)

for i in answer:
    print(i)
Comments