첫째 줄에 테스트케이스 개수 입력
두번째 줄부터 테스트케이스+1번째 줄까지 x1, y1, r1, x2, y2, r2가 주어짐
각 테스트케이스마다 사람이 존재할 수 있는 위치의 개수를 출력
두 원의 접점을 구하는 공식을 활용해 문제를 풀이
def check_neg(a, b):
# a, b 둘다 음수
if a < 0 and b < 0:
a, b = abs(a), abs(b)
if a <= b: return b-a
else: return a-b
# 한 쪽만 음수
elif a < 0: return b-a
else: return a-b
for _ in range(T):
...
x_dis = check_neg(x1, x2)
y_dis = check_neg(y1, y2)
dis = (x_dis**2)+(y_dis**2)
if dis == 0:
if r1 == r2: print(-1)
else: print(0)
elif abs(r1-r2)**2 == dis or (r2+r1)**2 == dis: print(1)
elif abs(r1-r2)**2 < dis and (r2+r1)**2 > dis: print(2)
else: print(0)
두 원 사이의 접점 구하기
1. 중점이 같은 경우
중점이 같은 경우는 반지름의 길이를 비교하여 완전 동일한 원 or 만나지 않는 원 판별
2. 외접인 경우
r1+r2 == d
3. 내접인 경우
abs(r1-r2) == d
4. 만나지 않는 경우
r1+r2 < d or (abs(r1-r2) > d and r1!=r2)
5. 서로 다른 두 점에서 만나는 경우
abs(r1-r2) < d < r1+r2
네이버 지식백과_중심거리