터렛
https://www.acmicpc.net/problem/1002
두 원의 접점의 개수를 구하는 문제다. 기하학 문제를 푼게 너무 오랜만이어서 여러가지 조건을 빠뜨리지 않는 것이 까다롭게 느껴졌다.
두 원의 중심, (x1, y1)과 (x2, y2)사이의 거리가 0인 경우와 아닌 경우로 크게 나눠서
d == 0인 경우를 먼저 처리하고 continue로 다음 케이스를 처리하도록 만들었다.
d != 0인 경우는 세 경우가 있어서 if문을 사용했다.
만나지 않는 경우와 한 점에서 만난 경우는 or로,
마지막의 두 점에서 만나는 경우는 |r1 - r2| < d < r1 + r2 를 만족해야 하므로 and로 처리했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
T = int(input())
for _ in range(T):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
distance = (x1 - x2)**2 + (y1 - y2)**2
if distance == 0:
if r1 != r2: print(0)
else: print(-1)
continue
r_plus = (r1 + r2)**2
r_minus = (r1 - r2)**2
if distance < r_minus or distance > r_plus: print(0)
elif distance == r_plus or distance == r_minus: print(1)
elif distance < r_plus and distance > r_minus: print(2)
|
cs |
원래 거리는 √((x1 - x2)² + (y1 - y2)²) 로 계산해야 하지만 편의를 위해 제곱한 값들을 가지고 계산했다.
'알고리즘' 카테고리의 다른 글
백준 - 10870번 (0) | 2021.08.13 |
---|---|
백준 - 10872번 (0) | 2021.08.13 |
백준 - 3053번 (0) | 2021.08.11 |
백준 - 4153번 (0) | 2021.08.10 |
백준 - 3009번 (0) | 2021.08.10 |