문제
풀이
이 문제는 크게 4가지의 경우로 나뉜다.
- 두개의 원이 두 점에 접할 경우(2)
- 두개의 원이 한 점에 접할 경우(1)
- 두개의 원이 접하지 않을 경우(0)
- 두개의 원이 같을 경우(∞)
1. 두개의 원이 두 점에 접할 경우
문제에 나와있는 예제 입력을 가지고 그래프를 그릴 수 있다.
이렇게 두 원점 사이의 거리(distance)가 두 원의 반지름 길이의 합(radius)보다 짧을때 두개의 원이 두 점에 접할 수 있다.
2. 두개의 원이 한점에 접할 경우
- 외접할 때
두 원점 사이의 거리(distance)이 한 원의 반지름(r1) + 다른 원의 반지름(r2)일 경우 외접하면서 두개의 원이 한 점에 접한다.
- 내접할 때
두 원점 사이의 거리(distance) + 한 원의 반지름 = 다른 원의 반지름일 경우 내접하면서 두개의 원이 한 점에 접한다.
두개의 원이 접하지 않을 경우
- 원이 안에 있을 경우
2. 원이 바깥에 있을 경우
두 원이 같을 경우
겹치는 점이 무한이다.
코딩
case = int(input())
for i in range(case):
x1, y1, r1, x2, y2, r2 = map(int,input().split())
radius = r1 + r2
distance = (((x1 - x2)**2) + ((y1 - y2)**2))**0.5
if x1 == x2 and y1 == y2:
if r1 == r2:
print(-1)
else:
print(0)
continue
elif distance > radius or distance + r1 < r2 or distance + r2 < r1:
print(0)
elif distance == radius or distance + r1 == r2 or distance + r2 == r1:
print(1)
else:
print(2)
수학을 손 놓은지 좀 되서 그런지 예상 외로 경우의 수가 좀 많아서 시간도 좀 걸렸고 코딩이 점점 길어졌다.
이상한 객기부리지 말고 파이썬 모듈을 쓰면 훨씬 간단하게 할 수 있으므로 모듈쓰는 걸 추천한다.
'Write-up > 백준' 카테고리의 다른 글
백준 4673번 - 셀프넘버(python) (0) | 2019.12.27 |
---|---|
백준 5622번 - 다이얼(python) (0) | 2019.12.26 |
백준 2675번 -문자열 반복(python) (0) | 2019.12.26 |
백준 11720 - 숫자의 합(python) (0) | 2019.12.22 |
백준 2562번 - 최댓값(python) (0) | 2019.12.22 |