사용자 도구

사이트 도구


ps:problems:boj:1002

터렛

ps
링크acmicpc.net/…
출처BOJ
문제 번호1002
문제명터렛
레벨실버 4
분류

기하

시간복잡도O(1)
사용한 언어Python
제출기록29200KB / 88ms
최고기록52ms
해결날짜2021/09/25

풀이

  • 각 터렛을 기준으로 마린이 있을수 있는 좌표의 범위를 그려보면, 반지름이 r인 원으로 나타난다. 두개의 원의 교점의 갯수를 구하면 된다.
  • 중점간의 거리와 두 반지름의 합 또는 차에 따라서, 두 원은 두 점에서 만나거나, 접하거나 (내접 or 외접), 접하지 않거나 (멀리 떨어져 있거나 한 원이 다른 원 안에 포함되거나), 일치하거나 할 수 있다. 각각의 조건은 그냥 그림을 그려보면 쉽게 파악 가능하고, 거기에 맞춰서 조건 분기를 하는 코드를 짜면 끝.

코드

"""Solution code for "BOJ 1002. 터렛".

- Problem link: https://www.acmicpc.net/problem/1002
- Solution link: http://www.teferi.net/ps/problems/boj/1002
"""


def main():
    T = int(input())
    for _ in range(T):
        x1, y1, r1, x2, y2, r2 = [int(x) for x in input().split()]
        dist = (x1 - x2) ** 2 + (y1 - y2) ** 2
        r_sum, r_diff = (r1 + r2) ** 2, (r1 - r2) ** 2
        if dist == 0 and r1 == r2:
            print('-1')
        elif r_diff < dist < r_sum:
            print('2')
        elif dist in (r_diff, r_sum):
            print('1')
        else:
            print('0')


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
N D E​ P G
 
ps/problems/boj/1002.txt · 마지막으로 수정됨: 2021/09/29 00:29 저자 teferi