본문 바로가기

PS/백준

[백준 1002번] 터렛 (파이썬/python)

728x90

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

 

1002번: 터렛

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

www.acmicpc.net

 

터렛이 닿을 수 있는 거리는 

중심점을 기준으로 r 만큼의 반지름을 가진 원과 같다.

 

따라서 두 원이 두 점에서 만날때 / 한점에서 접할떄 / 만나지 않을때를 고려해서

식을 써주면 된다.

 

접할떄 같은 경우 내접, 외접 두가지 케이스가 있고

만나지 않을때도 서로 의 밖에서 만나지 않는경우

혹은 큰 원 안에 작은 원이 쏙 들어가있어서 만나지 않는 경우가 있다. 잘 고려해야함!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import sys
from math import sqrt
 
input = sys.stdin.readline
 
= int(input())
 
for _ in range(t):
    cnt = 0
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
 
    # 두 터렛의 원점 사이의 거리
    between_length = sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
    
    # 두 원이 완전 겹칠때
    if between_length == 0 and r1 == r2:
        print(-1)
        # 내접, 외접할떄
    elif abs(r2 - r1) == between_length or r2 + r1 == between_length:
        print(1)
        # 두 점이 서로 안 만날때 내/외
    elif abs(r2 - r1) > between_length or r1 + r2 < between_length:
        print(0)
    else:
        print(2)
 
cs
728x90