http://acmicpc.net/problem/1002
{코드}
for _ in range(int(input())):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
d = (x1-x2)**2 + (y1-y2)**2
rad_sum = (r1 + r2)**2
rad_dif = (r1 - r2)**2
if d == 0:
if r1 == r2:
print(-1)
else:
print(0)
else:
if d in [rad_sum, rad_dif]:
print(1)
elif rad_dif < d < rad_sum:
print(2)
else:
print(0)
{설명}
어떤 점이 주어졌을 때 그 점에서 일정한 거리에 있는 점들은 원을 형성합니다.
즉, 두 점은 원의 중심이, 적까지의 거리는 반지름이 됩니다.
위 문제에서는 두 점에서 각각 적까지의 거리가 주어지므로 두 개의 원이 형성됩니다.
이때, 이 두 원의 교점이 적의 위치가 되기 때문에 교점의 개수가 답이 됩니다.
이를 위해 먼저 두 중심 사이의 거리를 구하고
만약 거리가 0이라면 두 원의 중심이 같은 것이므로 두 반지름이 같으면 적의 위치는 무한개, 다르면 없습니다.
만약 거리가 0이 아니라면 두 원의 중심 사이의 거리를 반지름의 합과 차와 비교해야 합니다.
만약 거리가 반지름의 합과 같다면 두 원이 밖에서 만나게 되고 차와 같으면 한 원 안에 다른 원이 한 점에서 만나게 됩니다.
만약 거리가 반지름의 합보다 작고 차보다 크면 두 점에서 교점이 생기게 됩니다.
나머지 경우는 서로 만나지 않는 경우입니다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 10870번-파이썬/Python] 피보나치 수 5 (0) | 2020.12.20 |
---|---|
[백준 10872번-파이썬/Python] 팩토리얼 (0) | 2020.12.19 |
[백준 3053번-파이썬/Python] 택시 기하학 (0) | 2020.12.18 |
[백준 4153번-파이썬/Python] 직각삼각형 (0) | 2020.12.18 |
[백준 3009번-파이썬/Python] 네 번째 점 (0) | 2020.12.17 |