백준 알고리즘 1002번: 터렛 파이썬 코드 <문제풀이>

2020. 7. 14. 21:27알고리즘 문제풀이

반응형

문제 출처 : https://www.acmicpc.net/problem/1002

 

 

문제요약 : 

두 좌표(A,B)와 해당 좌표의 거리(C)가 주어질 때 가능한 좌표(D)의 수를 출력하는 프로그램 작성

두 원의 위치관계를 이해하고 있는가를 판단 할 수 있는 문제

 

풀이 : 

두 원의 위치관계의 개념을 이해하고 조건문으로 분기하는 것이 중요했습니다.

 

크게 보면 네 가지 경우가 존재합니다

 

첫 번째 경우 : 두 원이 접하지 않는 경우

두 번째 경우 : 두 원이 한 점에서 접하는 경우

세 번째 경우 : 두 원이 두 점에서 접하는 경우

네 번째 경우 : 두 원이 일치하는 경우

더 자세한 개념은 https://mathbang.net/101 를 참고하세요

 

두 좌표의 거리를 계산한다.

좌표평면 상에서의 두 좌표의 거리는 https://mathbang.net/138 를 참고하세요

math 라이브러리를 사용하지 않으려고 내장함수 pow를 pow(A,0.5)같은 방식으로 계산을 진행했습니다.

 

def turret(x1,y1,r1,x2,y2,r2):
    dist = pow( ( (x1-x2)**2 + (y1-y2)**2 ), 0.5 )
    temp=r1+r2
    temp2=abs(r1-r2)

    if (dist == 0) :
        if (temp2 == 0):
            return -1
        else:
            return 0
    elif (dist == temp or dist == temp2):
        return 1
    elif (temp2 < dist and dist < temp):
        return 2
    else:
        return 0

testcase=int(input())
for i in range(testcase):
    a,b,c,d,e,f = map(int, input().split())
    print(turret(a,b,c,d,e,f))

 

 

두 원의 위치관계만 숙지하고 있으면 어렵지 않은 문제인데 조건식이 여러개다 보니 논리적 오류가 군데군데서 발생해서 몇 시간 헤맨 것 같습니다. 코딩 초보자라서 보시기에 코드가 그리 예쁘지는 않겠지만 질문이나 오류 지적할 게 보이신다면 의견 남겨주시면 감사하겠습니다.

 

 

반응형