본문 바로가기
Algorithm/etc

[파이썬] 백준 1002 : 터렛 (실버3)

by 베짱이28호 2023. 5. 30.

[파이썬] 백준 1002 : 터렛 (실버3)

 

 

1002번: 터렛

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

www.acmicpc.net


문제

이 문제는 웰 노운이군요 ㅋㅋㅋㅋ

이전에 풀었던 두 원 문제에서 넓이 대신 교점을 구하는 문제


풀이

0. 방향성 생각

편하게 풀기 위해서 큰 원을 원점에, 다른 한 원을 x축 양수부분에 올려놓는다

 

t = int(input())
for i in range(t):
    x1,y1,r1,x2,y2,r2 = map(int,input().split())
    
    if x1==x2 and y1==y2 : # 동심원인경우
        if r1==r2 :
            if r1==0 and r2==0: # 반지름 0
                print(1)
            else : # 반지름 양수
                print(-1)
        else :
            print(0)
    else :
        if r1 < r2 : # 큰거를 원점에, 작은거를 x축 위에
            x1,y1,r1,x2,y2,r2 = x2,y2,r2,x1,y1,r1
        
        d = ((x2-x1)**2+(y2-y1)**2)**0.5
        x1,y1 = 0,0
        x2,y2 = d,0
        
        if r1 <= x2 : # 작은원이 바깥에
            if x2-r2 > r1 : # 안만남
                print(0)
            elif x2-r2 == r1: # 점함
                print(1)
            else :
                print(2) # 두점에서 만남
        else : # 작은원이 안쪽에
            if x2+r2 < r1 : # 안만남
                print(0)
            elif x2+r2 == r1 :
                print(1)
            else :
                print(2)

 

코멘트

어렵다기 보다는 변수도 많고 케이스를 나눌게 많아서 실수하기 쉬운문제

댓글