본문 바로가기

알고리즘/백준

[Python] 백준 파이썬 1002 터렛

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

 

1002번: 터렛

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

www.acmicpc.net

import math

t = int(input())

for _ in range(t):

    x1, y1, r1, x2, y2, r2 = map(int, input().split())

    d = math.sqrt((x1-x2)**2 + (y1-y2)**2)  
    
    if d == 0 and r1 == r2 :  # 1
        print(-1)
    elif abs(r1-r2) == d or r1 + r2 == d:  # 2
        print(1)
    elif abs(r1-r2) < d < (r1+r2) :  # 3
        print(2)
    else:
        print(0)

문제를 보면 두 점 (x1, y1), (x2, y2)를 중심으로 하고 반지름이 각각 r1, r2인 원의 교점의 개수를 구하는 문제입니다.

 

두 원의 위치관계는 다음과 같습니다. ( r2 > r1이라 가정하겠습니다.)

두 점에서 만남 한 점에서 만남 셀 수 없음
내접 외접
(r2 - r1) < d < (r2+r1) r2-r1 = d r2 + r1 = d d=0, r1=r2

 

표에 나오는 관계에 맞게 코드를 짜주면 됩니다.

 

# 1 : 교점을 셀 수 없는 경우

# 2 : 내접 or 외접 하는 경우

# 3 : 두 점에서 만나는 경우

그 외에는 만나지 않음.