https://www.acmicpc.net/problem/1002
풀이
문제를 읽어보면 두 원의 접점을 계산하는 문제인 것을 알 수 있다.
1) 두 원의 중점의 위치가 같을 경우.
- 만일 두 원의 중점이 같은 경우, 반지름이 같다면 접점은 무한하다. 다른경우에는 접점은 0이다.
2) 두 원의 중점의 위치가 다를 경우.
- 두 원이 외접하는 경우와, 내접하는 경우. -> 1개
- 두 원의 중점 사이의 거리가 두 원의 반지름을 합보다 클 경우. -> 0개
- 그 외 두 원이 만나는 경우. -> 2개
코드
# 1002번 터렛
import sys
t = int(input())
for _ in range(t):
x1, y1, r1, x2, y2, r2 = map(int, sys.stdin.readline().split())
# 두 원의 중심 사이의 거리
mid_length = ((x2-x1)**2 + (y2-y1)**2)**(1/2)
# 두 원의 중점이 같은 위치일 경우.
if mid_length == 0:
if r1 == r2:
# 겹치는 점이 무한대 존재
print(-1)
else:
print(0)
# 두 원의 중점이 다른 위치일 경우.
else:
# 겹치는 점이 없을 경우. 두 원이 멀어서 닿지않는경우, 한 원이 다른 원을 포괄하는 경우.
if r1+r2 < mid_length or r1 > mid_length+r2 or r2 > mid_length+r1:
print(0)
# 두 원이 겹치는 점이 1개일 경우.
elif r1+r2 == mid_length or r1 == mid_length+r2 or r2 == mid_length+r1:
print(1)
# 두 원이 겹치는 점이 2개일 경우.
else:
print(2)
출력결과
'백준 > 구현' 카테고리의 다른 글
[백준][Python] 2776번 암기왕 - 코팩 (0) | 2023.08.30 |
---|---|
[백준][Python] 11653번 소인수분해 - 코팩 (0) | 2023.08.14 |
[백준][Python] 18110번 solved.ac - 코팩 (0) | 2023.08.01 |
[백준][Python] 1236번 성 지키기 - 코팩 (0) | 2023.08.01 |
[백준][Python] 11478번 서로 다른 문자열의 개수 - 코팩 (0) | 2023.05.08 |