원의 중심과 반지름을 이용하여 적이 있을 수 있는 x, y의 범위를 좁힌 후, (x - x1)2 + (y - y1)2 = r12, (x - x2)2 + (y - y2)2 = r22 을 만족하는 (x, y)의 개수를 구함
def count_place(xyr):
x1, y1, r1, x2, y2, r2 = xyr
cnt = 0
for x in range(max(x1 - r1, x2 - r2), min(x1 + r1 + 1, x2 + r2 + 1)):
for y in range(max(y1 - r1, y2 - r2), min(y1 + r1 + 1, y2 + r2 + 1)):
if ((x - x1) ** 2) + ((y - y1) ** 2) == r1 ** 2 and ((x - x2) ** 2) + ((y - y2) ** 2) == r2 ** 2:
cnt += 1
return cnt
T = int(input())
for _ in range(T):
print(count_place(list(map(int, input().split()))))
규현과 승환의 위치와 적 까지의 거리를 이용하여 각각 적이 존재할 수 있는 위치의 집합인 원을 그린다. 두 원이 만나지 않을 때, 한점에서 만날 때, 두점에서 만날 때, 일치할 때 경우를 이용하여 적이 존재할 수 있는 거리의 개수를 구한다.
T = int(input())
for _ in range(T):
x1, y1, r1, x2, y2, r2 = list(map(int, input().split()))
r = (((x1 - x2) ** 2) + ((y1 - y2) ** 2)) ** (1 / 2) #두 중점 사이 거리
if r == 0 and r1 == r2: #일치
print(-1)
elif r == r1 + r2 or r == abs(r1 - r2): #한점에서 만날경우 (내접, 외접)
print(1)
elif r > r1 + r2 or r < abs(r1 - r2): #만나지 않을 경우
print(0)
else: #두 점에서 만날경우
print(2)
📒 만약 적이 위치할 수 있는 좌표들을 구하라고 하면 풀이1이 적절한 풀이이지만 적이 위치할 수 있는 좌표의 개수를 구하는 문제이므로 풀이2가 적절하다.