티스토리 뷰

Algorithm/noj.am

[Python] 백준 1002번 - 터렛

SweetDev 2020. 12. 31. 20:19
N = int(input())
data = []
for _ in range(N):
    data.append(list(map(int, input().split())))
for i in range(N):
    x1 = data[i][0]
    y1 = data[i][1]
    r1 = data[i][2]

    x2 = data[i][3]
    y2 = data[i][4]
    r2 = data[i][5]

    distance = (x2-x1)**2 + (y2-y1)**2

    if x1 == x2 and y1 == y2:
        # 두 점이 같을 때 예외 처리
        # if r1 == 0 and r2 == 0:
        #     # 그 점밖에 안됨
        #     result.append(1)
        if r1 == r2:
            # 무한대의 점 가능
            print(-1)
        else:
            # 불가능
            print(0)
    else:
        # 두 점이 다를 때
        if (r1 + r2)**2 < distance:
            # 두 원이 아예 안만남
            print(0)
        elif (r1 + r2)**2 > distance:
            # 세가지 경우: 교점 2개, 내접, 내부에 있지만 교점 없음
            if distance < (max(r1, r2) - min(r1, r2))**2:
                print(0)
            elif distance > (max(r1, r2) - min(r1, r2))**2:
                print(2)
            else:
                print(1)
        else:
            # 외접 한다.
            print(1)

아 진짜 이거 푸느라 4시간 날림..실수해서ㅠ

내접하는 경우랑 원이 안에 있긴 한데 안겹치는 경우도 생각해주는게 중요하다. 

 

 

꿀팁: int랑 float 비교하면서 오류날 수 있으니 아예 sqrt()를 안해주고 푸는것도 좋은 방법이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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
27 28 29 30 31
글 보관함