Algorithm/Implementation

[백준] 1002 터렛 (Python 파이썬)

안드선생 2021. 10. 2. 03:56
반응형

https://www.acmicpc.net/problem/1002

 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.

www.acmicpc.net

문제 설명

두 좌표 (x1, y1)와 (x2, y2)가 주어지고, 목표점과의 거리 r1, r2가 주어질 때

목표점이 존재할 수 있는 좌표의 수를 구하는 문제이다.


풀이 과정

이 문제는 고등학교 교과과정에서 배웠던 원의 방정식 중 두 원의 교점을 활용하는 문제이다.

먼저, 원이라는 것은 하나의 정점으로부터 같은 거리를 가지는 점들의 집합이므로

정점(x1, y1)로 부터 거리 r1을 가진 점들은 원으로 존재할 것이고

정점(x2, y2)로 부터 거리 r2을 가진 점들은 원으로 존재할 것이기 때문이다.

 

두 원은 다음과 같은 관계로 존재할 수 있다.

출처 : Primitive님 블로그

위의 경우들을 다음과 같이 코드로 표현하면 되는 문제이다.

import math
t = int(input())

for i in range(t):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    dist = math.sqrt((x1 - x2)**2 + (y1-y2)**2)

    if x1 == x2 and y1 == y2:   # 두 원의 중심이 같을 때
        if r1 == r2:            # 반지름이 같으면 : 같은 원
            print(-1)
        else:
            print(0)            # 다르면 영원히 만나지 않음

    else:                       # 두 원의 중심이 다를 때
        if abs(r1-r2) == dist or r1 + r2 == dist: # 내접원 or 외접원
            print(1)
        elif abs(r1-r2) < dist < r1 + r2:   # 두 점에서 만날 때
            print(2)
        else:           # 만나지 않음
            print(0)

https://github.com/HongEunho

전체 문제 & 코드는 위의 깃에 정리되어 있습니다.

팔로우 & 맞팔은 환영입니다 !

반응형