국문과 유목민

[기본수학2] 1002번 터렛 본문

알고리즘_코딩테스트/백준코딩테스트_단계별문제풀이

[기본수학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. 코멘트

- 특정한 공식이 있을 것이라고 생각했으나, 당장에 내 머리로는 기억이 안 나서 검색을 했다. 그리고 원의 방정식을 활용해서 문제를 풀어야 한다는 것을 알았다. (아주 예전에 배웠던 기억이 희미하게 있다...)

- 원의 방정식을 안다면 금방 풀 수 있는 문제라고 생각하지만 해당 문제가 원의 방정식임을 아는데도 시간이 좀 걸렸을 거 같고, 완벽히 아는 것이 아니라면 검색에 의존할 수밖에 없는 것 같다.