문제 풀이/백준
[Python] 백준 1002 - 터렛
gnoJJ
2022. 5. 15. 00:08
https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
해결방법
- 원의 개념을 알아야 풀 수 있는 문제이다.
- 원의 교점의 개수를 구하는 문제이다.
- 두 원이 겹치는 상황을 그림을 그려 이 문제를 풀었다.
풀이
- d : 두 원점 사이의 거리




코드
for _ in range(int(input())): # 테스트케이스 입력 및 반복
# 입력
x1,y1,r1, x2,y2,r2 = map(int,input().split())
# 두 원 사이의 거리 : d
d = ((x1-x2)**2 + (y1-y2)**2)**0.5
# 하나의 경우에서만 따지기.
r1, r2 = max(r1,r2), min(r1,r2)
if x1==x2 and y1==y2 and r1==r2: # 겹치는 경우
print(-1)
elif r1+r2<d or r1>d+r2:
print(0)
elif r1+r2==d or r1==d+r2:
print(1)
elif r1+r2 > d:
print(2)
코드 설명
1. max와 min 함수를 사용한 이유?
r1, r2 = max(r1,r2), min(r1,r2)
r1과 r2 중에서 어느 반지름이 더 크고, 작게 들어올지 예측이 불가능하다. 그래서 r1은 max, r2를 min으로 설정해두고 풀이를 했다. 이렇게 하면 원1의 크기가 원2의 크기보다 항상 큰 경우이므로, 하나 경우에서만 따질 수 있기 때문이다.