본문 바로가기
프로그래밍/알고리즘

백준 1002번 터렛 파이썬

by monicada 2022. 11. 28.
728x90

문제 

 

1002번: 터렛

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

www.acmicpc.net

 

코드      

#math를 가져온다 
import math

n = int(input())

for _ in range(n):
    #사용할 변수를 선언 
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    # 두 원의 거리를 구하는 공식에 대입한 수식
    #'sqrt'는 제곱근 함수, 'math.sqrt(x)'를 하면 x의 제곱근을 반환  
    distance = math.sqrt((x1-x2)**2 + (y1-y2)**2)  
    #두 원이 동심원이고 반지름이 같으면 
    if distance == 0 and r1 == r2 : 
        #무제한으로 그 수가 많으므로 문제 조건에 따라 -1을 반환 
        print(-1)
    #두 원이 내접, 외접이라 1개만 겹칠 경우 
    elif abs(r1-r2) == distance or r1 + r2 == distance: 
        print(1)
    #두 원이 서로 다른 두 점에서 만날 경우 
    elif abs(r1-r2) < distance < (r1+r2) :  
        print(2)
    #그 외의 경우(안 만나는 경우) 
    else:
        print(0)

 

1. 두 좌표 사이의 거리를 구하는 방법 

2. 두 원의 점이 개수를 구분 

점의 개수가 무한대인경우

- 두 원의 크기가 같은 경우 d=0, r = r

 

점이 1개에서 만나는 경우 

- 외접

- 내접 

 

점이 2개에서 만나는 경우

- 'r−r′<d<r+r′ 인 경우

 

점이 안 만나는 경우 

- 동심원인 경우 

- 내부에 포함인 경우 

- 외부에서 만나지 않는 경우 

댓글