백준 1002번 (파이썬)

Jiya·2025년 3월 9일


테스트 케이스 숫자 입력 후
6개의 숫자를 공백 문자를 기준으로 입력.
input().split()으로 6개의 리스트를 받았다.
문제 보고 바로 생각난 아이디어가 고등학교 때 배웠던 '두 원의 위치관계'.

위의 그림은 r > r' 라 가정한 것이다.

from math import sqrt
N = int(input())
for i in range(N):
    data = list(map(float, input().split()))
    if data[0] == data[3] and data[1] == data[4] and data[2] == data[5]:
        print(-1)
    elif data[2] + data[5] > sqrt((data[3] - data[0])**2 + (data[4] - data[1])**2) > abs(data[2] - data[5]):
        print(2)
    elif data[2] + data[5] == sqrt((data[3] - data[0])**2 + (data[4] - data[1])**2):
        print(1)
    elif abs(data[2] - data[5]) == sqrt((data[3] - data[0])**2 + (data[4] - data[1])**2):
        print(1)
    else:
        print(0)

처음에 data 쪽에 list() 안해줘서 틀렸다. 알고 보니 map이 지연 평가 함수라 리스트로 사용하려면 반드시 list로 감아줘야한다고 한다.

x좌표, y좌표, 반지름까지 모두 같은 경우는 만나는 점이 무한 개이니 print(-1)을 해주고
그 다음 조건 하나로만 끝낼 수 있는 두 점에서 만나는 경우를 써준다.
그 다음 조건 두 개로 끝낼 수 있는 한 점에서 만나는 경우를 두 elif를 이용해 써줬다. 만나지 않는 경우는 조건 세 개가 필요하므로 귀찮아서 그냥 else로 처리.

오랜만에 두 원의 위치관계를 복습하게 되어서 좋았음.ㅎㅎ

profile
코딩 공부 노트

0개의 댓글