[백준/파이썬] 1002번 터렛 풀이

업데이트:



문제 정보


풀이

문제

서로 다른 두 지점에 있는 터렛에서 계산한 마린의 위치 계산

코드

for _ in range(int(input())):
    x1, y1, r1, x2, y2, r2 = tuple(map(int, input().split()))
    if x1==x2 and y1==y2 and r1==r2 :
        print(-1)
        continue
    diffPow = (x1-x2)**2 + (y1-y2)**2
    sumPow = (r1+r2)**2
    rDiffPow = (r1-r2)**2
    if diffPow == sumPow or rDiffPow == diffPow :
        print(1)
    elif diffPow > sumPow or rDiffPow > diffPow :
        print(0)
    else:
        print(2)            

설명

만약 백준을 번호순서대로 풀고 계신 코딩 입문자 분이 있다면 제일 처음으로 막히셨을 겁니다.

파이썬의 특성상, 각 변수들을 줄단위로 한번에 입력받습니다.

이렇게 입력받은 값을 split() 하여 공백을 기준으로 나누고, 각각을 int형으로 매핑합니다.

이렇게 생성되는 map 객체를 tuple로 변환1하여 각 변수들에 대입합니다.

이제 이렇게 입력 받은 값의 (x,y)좌표를 중심으로 하고 반지름이 r인 두 원을 그려, 교점을 구합니다.

이 방법으로 총 6가지의 경우를 구할 수 있습니다.


1. 기준 좌표가 같고 계산한 거리가 같은 경우

가장 쉽습니다. 두 원은 같으므로 교점은 무한대가 됩니다.

1

따라서 문제의 조건에 따라 -1을 출력합니다.

2. 그렇지 않을 때

  • 두 지점 사이의 거리가 두 원의 반지름의 합과 같거나, 반지름의 차가 두 점 사이의 거리인경우

    2-1-1     2-1-2

    교점은 오직 하나만 존재합니다.

  • 두 지점 사이의 거리가 두 원의 반지름의 합보다 크거나, 반지름의 차가 두 점 사이의 거리보다 큰 경우

    2-2-1     2-2-2

    교점은 없습니다.

  • 그 외

    2-3

    교점은 두개 존재합니다.




1 참고로, tuple로의 변환과정은 없어도 상관없습니다.



댓글남기기