hong_mok
[Baekjoon] 1002번: 터렛 본문
터렛
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 이루어져 있다.
한 줄에 x1, y1, r1, x2, y2, r2가 주어진다. x1, y1, x2, y2는 -10,000보다 크거나 같고, 10,000보다 작거나 같은 정수이고, r1, r2는 10,000보다 작거나 같은 자연수이다.
3
0 0 13 40 0 37
0 0 3 0 7 4
1 1 1 1 1 5
출력
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
2
1
0
생각
두 점의 좌표 ( (x1, y1), (x2, y2) )가 주어지고, 두 점으로부터 목표물의 거리(r1, r2) 가 주어진다.
이때 목표물이 있을 수 있는 위치는, 중심이 (x1,y1), 반지름이 r1인 원과 중심이 (x2, y2), 반지름이 r2인 원 두개가 접하는 점의 개수(n)를 구하는 것과 같다.
네가지 경우로 나눌 수 있다.
- 두 원이 같은 원인 경우 (n = 무한대)
-> 두 원의 중심이 같고 반지름이 같은 경우 - 두 원이 한점에서 만나는 경우 (n = 1)
-> 두 원의 중심 사이의 거리가 반지름의 합과 같거나(외접) 차이(내접)와 같을 경우 - 두 원이 두 점에서 만나는 경우 (n = 2)
-> 두 원의 중심 사이의 거리가 반지름의 차이와 반지름의 합 사이의 값일 경우 - 두 원이 만나지 않는 경우 (n = 0)
-> 나머지 경우
이걸 그대로 조건문으로 옮기면 될 것 같다..!
코드
T = int(input())
for i in range(T):
x1, y1, r1, x2, y2, r2 = list(map(int, input().split()))
d = ((x1-x2)**2 + (y1-y2)**2) ** 0.5
if d == 0 and r1 == r2:
print(-1)
elif d == r1 + r2 or d == abs(r1-r2) :
print(1)
elif abs(r1-r2) < d < r1 + r2 :
print(2)
else :
print(0)
'Baekjoon' 카테고리의 다른 글
[Baekjoon] 4949번: 균형잡힌 세상 (0) | 2022.02.23 |
---|---|
[Baekjoon] 2108번: 통계학 (0) | 2022.02.17 |
[Baekjoon] 2447번: 별 찍기 - 10 (0) | 2022.02.17 |
[Baekjoon] 1011번: Fly me to the Alpha Centauri (0) | 2022.02.17 |
Comments