반응형
[ Contents ]
1. 문제 (링크 참조)
2. 문제 풀이
두 개의 터렛의 위치(x, y)와, 각각 자신의 반경(r)에서 얼마만큼 마린이 떨어져 있는지 알려줍니다. 즉, 두 원(감시 반경)이 만나는 지점의 수를 구해야 합니다.
경우의 수는 크게 3가지입니다. 두 점이 만나는 경우와, 한 점에서 만나는 경우, 그리고 동심원이라서 무한대로 만나는 경우입니다.
하지만 문제의 예제입력을 보면, 위와 같은 경우도 있습니다... 즉 터렛에서 계산한 마린까지의 거리가 정확하지 않으며, 두 터렛이 전혀 다르게 예측할 수 있습니다.
따라서 문제에 휘둘리지 마시고, 두 원이 이룰 수 있는 모든 경우의 수를 고려하시면 됩니다.
3. 코드
import sys
input = sys.stdin.readline
T = int(input())
for _ in range(T):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
dist = ((x1-x2)**2 + (y1-y2)**2)**0.5 #두 터렛 간의 거리 제곱
#case1 두 원이 겹침
if (x1, y1, r1) == (x2, y2, r2):
print(-1)
#case2 한 점만 만남 (내접, 외접)
elif dist == abs(r1-r2) or dist == r1+r2:
print(1)
#case3 두 점만 만남
elif abs(r1-r2) < dist < r1+r2:
print(2)
#case4 만나지 않음
else:
print(0)
두 원의 중심거리를 구하고, if-else문으로 판별합니다.
두 원이 내접하는 경우도 고려해서 판별해야 합니다.
반응형
'Algorithm' 카테고리의 다른 글
[구현/수학] 백준 5086 배수와 약수 - 파이썬(Python) (0) | 2022.03.30 |
---|---|
[자료구조/큐] 백준 1021 회전하는 큐 - 파이썬(Python) (0) | 2022.03.29 |
[Brute Force] 백준 10448 유레카 이론 - 파이썬(Python) (0) | 2022.03.27 |
[구현/해시] 백준 1076 저항 - 파이썬(Python) (0) | 2022.03.26 |
[구현/수학] 백준 2003 수들의 합 2 - 파이썬(Python) (0) | 2022.03.25 |
댓글