BOJ
[Python 3] BOJ - 1002 "터렛"
PeiSea
2020. 4. 7. 21:56
# 문제 링크 : https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
# 풀이 :
개인적으로 이 문제의 핵심은 두 원의 관계를 묻는 것이라 생각한다. 터렛과 마린의 거리는 반지름이므로, 원이 접하는 경우에 따라 류재명의 가능한 좌표의 갯수가 달라진다.
위 그림 1에서 1번 경우, 2번 경우는 한 점에서 만나므로 답이 1이고, 4번 경우는 모든 점에서 만나므로 답은 -1, 3번 경우는 만나지 않으므로 답은 0이 된다. 두 원의 중심간의 거리와 각각의 반지름의 관계를 통해 어떤 경우에 해당하는 알 수 있다.
# 코드
import sys, math
b = int(sys.stdin.readline())
for i in range(b):
a = list(map(int, sys.stdin.readline().split()))
# 중심 간 거리 계산
r1 = [a[0], a[1]]
r2 = [a[3], a[4]]
center_distance = math.sqrt((r1[0] - r2[0]) ** 2 + (r1[1] - r2[1]) ** 2)
# 반지름 거리 계산
m = [a[2], a[-1]]
# 1. 한점에서 만나는 경우
if center_distance != 0 and center_distance == m[0] + m[1]:
print(1)
elif center_distance != 0 and center_distance == (max(m) - min(m)):
print(1)
# 2. 두점에서 만나는 경우
elif center_distance != 0 and (max(m) - min(m) < center_distance < m[0] + m[1]):
print(2)
# 3. 아예 원이 같은 경우
elif center_distance == 0 and m[0] == m[1]:
print(-1)
# 4. 아예 안만나는 경우
else:
print(0)