문제
https://www.acmicpc.net/problem/1002
문제는 위 사이트를 참고해주세요.
풀이
T = int(input())
n = 0
while n != T:
x1, y1, r1, x2, y2, r2 = map(int, input().split())
d = ((x2 - x1) ** 2 + (y2 - y1) ** 2)
if x1 == x2 and y1 == y2:
if r1 == r2:
print(-1)
else:
print(0)
else:
if d < (r1 - r2) ** 2 or d > (r1 + r2) ** 2:
print(0)
elif d == (r1 + r2) ** 2 or d == (r1 - r2) ** 2:
print(1)
elif d > (r1 - r2) ** 2:
print(2)
n += 1
이 문제에서 출력 값 2, 1, 0은 두 원이 겹치는 점의 개수로 생각하시면 됩니다.
T에는 테스트 케이스 개수를 저장해줍니다.
n을 0으로 초기화합니다.
while문은 n이 테스트 케이스와 같아지면 종료되게 합니다.
먼저 두 원의 좌표와 반지를 각각 입력받습니다.
d는 두 원의 거리로 루트를 씌우지 않고 뒤 쪽에 쓰이는 반지름에 다 제곱을 했습니다.
먼저 좌표가 무한일 경우는 두 원이 완전히 겹치는 경우인데,
두 원의 좌표가 같고 반지름이 같으면 완전히 겹치기 때문에 -1를 출력합니다.
반지름이 다르면 둘 중 한 원이 다른 원 안에 있기 때문에 0을 출력합니다.
그리고 마지막 else문의 조건은 직접 두 원을 그려보시면 더 이해가 빠르실 겁니다.
(저는 손으로 그리기 귀찮아 파이썬의 turtle을 사용했습니다.)
모든 조건문이 끝나면 n에 +1을 해주고 다시 while문 처음으로 돌아갑니다.
결과
'IT > 알고리즘' 카테고리의 다른 글
1일 N알고리즘 - #31 (0) | 2020.05.28 |
---|---|
1일 N알고리즘 - #30 (0) | 2020.05.28 |
1일 N알고리즘 - #28 (0) | 2020.05.25 |
1일 N알고리즘 - #27 (0) | 2020.05.25 |
1일 N알고리즘 - #26 (0) | 2020.05.25 |
댓글