알고리즘_코딩테스트/백준코딩테스트_단계별문제풀이
[기본수학2] 1002번 터렛
논곰
2022. 1. 4. 21:28
"이것이 코딩테스트다(나동빈 저)"에서 나온 문제에 대한 코드를 다루고 있습니다.
문제에 대한 구체적인 설명과 조건 등은 책을 참고해주시기 바랍니다.
소요시간: 30분 + a
1. 문제 설명
- https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
2. 접근 방식
- 원의 방정식 이용 (https://mathbang.net/101 참고)
- 터렛 FAQ 참고 https://www.acmicpc.net/board/view/38854
3. 코드
import math
def find_dist(x1, y1, r1, x2, y2, r2):
distance = math.sqrt((x1-x2)**2 + (y1-y2)**2 )
if distance == 0 and r1==r2:
return -1
elif abs(r1-r2) == distance or (r1+r2) == distance:
return 1
elif abs(r1-r2) < distance < (r1+r2):
return 2
else:
return 0
n = int(input())
for _ in range(n):
x1, y1, r1, x2, y2, r2 = map(int, input().split())
print(find_dist(x1, y1, r1, x2, y2, r2))
4. 코멘트
- 특정한 공식이 있을 것이라고 생각했으나, 당장에 내 머리로는 기억이 안 나서 검색을 했다. 그리고 원의 방정식을 활용해서 문제를 풀어야 한다는 것을 알았다. (아주 예전에 배웠던 기억이 희미하게 있다...)
- 원의 방정식을 안다면 금방 풀 수 있는 문제라고 생각하지만 해당 문제가 원의 방정식임을 아는데도 시간이 좀 걸렸을 거 같고, 완벽히 아는 것이 아니라면 검색에 의존할 수밖에 없는 것 같다.