-
[Python 3] BOJ - 1002 "터렛"BOJ 2020. 4. 7. 21:56
# 문제 링크 : https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
# 풀이 :
개인적으로 이 문제의 핵심은 두 원의 관계를 묻는 것이라 생각한다. 터렛과 마린의 거리는 반지름이므로, 원이 접하는 경우에 따라 류재명의 가능한 좌표의 갯수가 달라진다.
<그림 1. 가능한 경우의 수> 위 그림 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)
'BOJ' 카테고리의 다른 글
[Python 3] BOJ - 1016 "제곱 ㄴㄴ수" (0) 2020.04.09 [Python 3] BOJ - 1024 "수열의 합" (0) 2020.04.08 [Python 3] BOJ - 13907 "세금" (0) 2020.04.03 [Python 3] BOJ - 10026 "적록 색약" (0) 2020.04.02 [Python 3] BOJ - 9251 "LCS" (0) 2020.04.02