
백준 1002 파이썬
1. 문제
2. 설명
원의 교점 개수를 구하는 문제다.
3. 풀이
원의 교점의 개수는 0개, 1개, 2개가 될 수 있는데 다음의 6가지 경우가 있다.
- 두 원이 완전히 동일한 경우 (무한대)
- 반지름이 서로 같고, 원의 중심이 같다.
- 두 원이 외접하는 경우 (한 점에서 만남)
- 두 원의 중심의 거리가 두 원의 반지름의 합과 같다.
- 두 원이 내접하는 경우 (한 점에서 만남)
- 두 원의 중심의 거리가 반지름의 차와 같다
- 두 원이 두 점에서 만나는 경우
- 두 원의 중심의 거리가 반지름의 차보다는 크고 반지름의 합보다는 짧다
- 두 원이 만나지 않는 경우 (외부에서 떨어져 있음)
- 두 원의 중심의 거리가 두 원의 반지름의 합보다 크다
- 두 원이 만나지 않는 경우 (한 원이 다른 원 내부에 포함됨)
- 두 원의 중심의 거리가 반지름의 차보다 짧다
이를 그림으로 표현하면 다음과 같다.
4. 코드
count = int(input())
for _ in range(count):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
distance = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 # 두 원의 중심 거리
# 두 원이 완전히 동일한 경우 (무한대)
if distance == 0 and r1 == r2:
print(-1)
# 두 원이 외접하는 경우 (한 점에서 만남)
elif distance == r1 + r2:
print(1)
# 두 원이 내접하는 경우 (한 점에서 만남)
elif distance == abs(r1 - r2):
print(1)
# 두 원이 두 점에서 만나는 경우
elif abs(r1 - r2) < distance < r1 + r2:
print(2)
# 두 원이 만나지 않는 경우 (외부에서 떨어져 있음)
elif distance > r1 + r2:
print(0)
# 두 원이 만나지 않는 경우 (한 원이 다른 원 내부에 포함됨)
elif distance < abs(r1 - r2):
print(0)