공부/알고리즘
[단계별로 풀어보기][python 3] 기본 수학2 - 터렛 (1002)
도리암
2022. 4. 26. 22:49
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
답안
두 원이 내접하는지, 외접하는지를 구분하고 그에 따라 반지름의 차이를 구하면 쉽게 구할 수 있다.
1. 동심원
동심원의 경우 r1과 r2가 같으면 모든 점에서 만나므로 -1을 반환한다.
2. 내접
r1-r2는 항상 d보다 같거나 크게 된다.
만약 두 반지름의 길이의 차이(r1-r2)가 두 원의 거리(d)의 절대값보다 작다면, 두 원은 2개의 점에서 교차한다.
만약 r1-r2가 d와 같다면 한 점에서 만나고, 그 이하면 만나지 않는다.
3. 외접
r1-r2는 항상 d보다 작게 된다.
r1+r2가 d보다 크게 되면 원은 두 점에서 만나고
r1+r2가 d와 같으면 한 점에서 만나며
r1+r2가 d보다 작으면 만나지 않는다.
from math import *
t = int(input())
result = []
for i in range(t):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
d = sqrt((x1-x2)**2 + (y1-y2)**2)
R = r1 + r2
if (x1 == x2) and (y1 == y2) and (r1 == r2):
result.append(-1)
else:
if (r1-r2)**2 > d**2:
result.append(0)
elif (r1-r2)**2 == d**2:
result.append(1)
else:
if d < R:
result.append(2)
elif d == R:
result.append(1)
else:
result.append(0)
for i in result:
print(i)