https://www.acmicpc.net/problem/1002
import math
t = int(input())
for _ in range(t):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
d = math.sqrt((x1-x2)**2 + (y1-y2)**2)
if d == 0 and r1 == r2 : # 1
print(-1)
elif abs(r1-r2) == d or r1 + r2 == d: # 2
print(1)
elif abs(r1-r2) < d < (r1+r2) : # 3
print(2)
else:
print(0)
문제를 보면 두 점 (x1, y1), (x2, y2)를 중심으로 하고 반지름이 각각 r1, r2인 원의 교점의 개수를 구하는 문제입니다.
두 원의 위치관계는 다음과 같습니다. ( r2 > r1이라 가정하겠습니다.)
두 점에서 만남 | 한 점에서 만남 | 셀 수 없음 | |
내접 | 외접 | ||
(r2 - r1) < d < (r2+r1) | r2-r1 = d | r2 + r1 = d | d=0, r1=r2 |
표에 나오는 관계에 맞게 코드를 짜주면 됩니다.
# 1 : 교점을 셀 수 없는 경우
# 2 : 내접 or 외접 하는 경우
# 3 : 두 점에서 만나는 경우
그 외에는 만나지 않음.
'알고리즘 > 백준' 카테고리의 다른 글
[Python] 백준 파이썬 1358 하키 (0) | 2022.10.08 |
---|---|
[Python] 백준 파이썬 1004 어린 왕자 (1) | 2022.10.07 |
[Python] 백준 파이썬 3053 택시 기하학 (0) | 2022.10.05 |
[Python] 백준 파이썬 2477 참외밭 (1) | 2022.10.04 |
[Python] 백준 파이썬 4153 직각 삼각형 (0) | 2022.10.03 |