https://www.acmicpc.net/problem/1002
1002번 터렛문제는 사실 기하학 문제입니다. 뭔가 문제의 내용만 가만히 읽어보면 그런 생각이 팍 들지 않더라고요. 문제를 잘 읽어보면, 터렛에서 근무하는 조규현의 좌표(x1, y1) 백승현(x2, y2)의 좌표가 주어져 있고, 조규현과 r1만큼 떨어진 곳에, 그리고 백승현과 r2 만큼 떨어진 곳에 류재명이 있다고 하는데요, 그렇다면 조규현(x1, y1)으로부터 r1 떨어진 모든 좌표와 백승현(x2, y2)으로부터 r2 떨어진 모든 좌표 중, 두 좌표가 겹치는 곳을 모두 찾으면 될 겁니다.
hint!
조금 더 간단히 말하자면, 중심이 (x1, y1)이고 반지름이 r1인 원과 중심이 (x2, y2)이고 반지름이 r2인 원의 교점의 개수를 구하는 문제입니다. 제가 고등학교 수학시간에는 이 내용을 "원의 위치관계" 의 이름으로 공부를 했었는데요, 이 블로그 에서 자세히 설명해 주셨습니다. 참고하여 코드를 작성해주시면 좋을 것 같습니다. 저는 이 내용을 바탕으로 아래와 같은 코드를 작성하여 풀이했습니다.
import math
num = int(input())
results = []
for i in range(num):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
# 두 원의 중심 사이의 거리를 계산
d = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
# 두 원의 중심이 동일하고, 반지름이 같다면 류재명이 존재할 수 있는 좌표의 개수는 무한대
if x1 == x2 and y1 == y2 and r1 == r2: results.append(-1)
# 교점이 두 개인 경우
elif abs(r1 - r2) < d and r1 + r2 > d: results.append(2)
# 교점이 한 개인 경우, 즉 접하는 경우
elif abs(r1 - r2) == d or r1 + r2 == d: results.append(1)
# 그 외에는 교점이 없음
else: results.append(0)
for result in results:
print(result)
'Python > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘: python 3] #1006 - 습격자 초라기 (0) | 2019.09.05 |
---|---|
[백준 알고리즘: python 3] #1005 - ACM Craft (0) | 2019.09.03 |
[백준 알고리즘: python 3] #1004 - 어린 왕자 (0) | 2019.09.03 |
[백준 알고리즘: python 3] #1003 - 피보나치 함수 (0) | 2019.09.03 |
[백준 알고리즘: python 3] #1000, #1001 - A+B, A-B (0) | 2019.09.02 |