Home [Python] 백준 1002번 : 터렛
Post
Cancel

[Python] 백준 1002번 : 터렛

Problem

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

Solution

두 원의 위치관계를 활용해 푸는 문제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
t = int(input())

for i in range(t):
    x1, y1, a, x2, y2, b = map(int, input().split())
    d = ((x1-x2)**2+(y1-y2)**2)**0.5 # 두 점 사이의 거리 구하기

    if d > a+b or d < abs(a-b): # 밖에서 안만나거나 안에서 안만나는 경우
        print(0)
    elif d == a+b or d == abs(a-b) !=0: # 외접, 내접
        print(1)
    elif abs(a-b) < d < a+b: # 서로 다른 두점에서 만나는 경우
        print(2)
    else: # 같은 원인 경우
        print(-1)

두 점 사이의 거리를 먼저 구한 후 각각의 점에서 측정한 거리를 반지름이라고 생각하면 두개의 원을 만들 수 있다. 이 두 원의 교점이 문제에서 류재명이 있을 수 있는 위치인 셈이다. 각각의 조건의 식은 학창시절 배운 거리와 반지름간의 관계를 활용하였다.

처음 제출했을 때는 마지막 조건을 빠뜨렸는데 이는 입력이 0 0 1 0 0 1과 같이 동일한 원인 경우에 해당한다. 이 경우에는 교점이 무한대이므로 -1을 출력하도록 조건을 추가하였다.

Ref.

두 원의 위치관계

This post is licensed under CC BY 4.0 by the author.

[Python] 백준 2442번 : 별 찍기

[Python] List Comprehension