https://www.acmicpc.net/problem/1002
해결방법
- 원의 개념을 알아야 풀 수 있는 문제이다.
- 원의 교점의 개수를 구하는 문제이다.
- 두 원이 겹치는 상황을 그림을 그려 이 문제를 풀었다.
풀이
- 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의 크기보다 항상 큰 경우이므로, 하나 경우에서만 따질 수 있기 때문이다.
'문제 풀이 > 백준' 카테고리의 다른 글
[Python] 백준 1789 - 수들의 합 (0) | 2022.05.20 |
---|---|
[Python] 백준 2805 - 나무 자르기 (0) | 2022.05.19 |
[Python] 백준 23885 - 비숍 투어 (0) | 2022.05.11 |
[Python] 백준 6588 - 골드바흐의 추측 (0) | 2022.05.11 |
[Python] 백준 5747 - Odd or Even (0) | 2022.05.08 |
댓글