Python_알고리즘
[Python] 백준 1002 터렛
hahihuree
2021. 8. 6. 00:56
문제 바로가기
문제분석
# 두 점에서 각각 적까지의 거리가 주어지므로 두개의 원을 만들 수 있다.
# 이 때, 두 원의 교점이 적의 위치가 되기 때문에 교점의 개수가 답이 된다.
# 네가지 케이스로 나눠서 풀이한다.
- 거리가 0이 아니라면 두 원의 중심 사이의 거리를 반지름의 합, 차와 비교한다.(거리가 0일 경우라면 두 원이 일치하므로 무한대 경우의 수가 나온다.)
- 거리가 반지름의 합과 같다면 두 원이 밖에서 만나게되고(원이 외접하는 것),
- 차와 갑다면 한 원 안의 다른 원이 한 점에서 만난다(원이 내접하는 것).
- 거리가 반지름의 합보다 작고 차보다 크면, 두 점에서 만난다.
- 나머지 경우는 서로 만나지 않는 경우다.
문제풀이
T = int(input())
for i in range(T):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
r = ((x1 - x2)**2 + (y1 - y2)**2)**0.5 # 두 점의 좌표가 주어졌을 때 거리 구하는 공식
R = [r1, r2, r]
m = max(R)
R.remove(m)
if r == 0 and r1 == r2: # 두 점의 거리가 0이고 반지름이 같다는건 겹치는 원이라는 뜻
print(-1)
elif r == r1 + r2 or m == sum(R): # 외접하거나 내접할때라는 뜻
print(1)
elif m > sum(R): # 두 원이 겹치지 않을때라는 뜻
print(0)
else: # 그 이외의 경우는 모두 두번 만나는 것.
print(2)