백준 문제풀이

[백준 1002번 문제] 터렛

eunda_coding 2022. 5. 3. 16:47

점점 문제의 난이도가 어려워지고 프로젝트기간이여서 티스토리에 코드 리뷰하는것에 소홀했었던거 같다...

 

이 문제는 두개의 터렛이 위치한 좌표가 주어지고 그 터렛에서 다른 터렛이 위치한 곳까지의 거리가 주어졌을 때, 그 터렛이 위치할 수 있는 경우의 수를 계산해서 결과값을 보여주는 문제이다.

 

 

각각의 터렛의 좌표와 타겟터렛까지의 거리가 미리 주어져서 터렛의 위치에서 다른 타겟 터렛이 위치할 수 있는 지점을 그려보면 원이 그려진다. 

 

그리하여, 처음에 두개의 터렛이 주어지기 때문에 두개의 원의 위치를 이용해서 타겟 터렛의 위치할 수 있는 점의 개수를 구하기 위해서는 두 터렛사이의 거리를 알아야한다.

 

<두 점사이의 거리 구하는 공식>

 x1, y1, r1, x2, y2, r2 = map(int,input().split())
 dis = math.sqrt((x1-x2)**2 + (y1-y2)**2)

각각의 좌표와 거리를 입력받은 후에 두 점사이의 거리를 계산하여 dis 라는 변수에 저장하였다.

 

 

<두 원의 위치관계>

위의 그림과 같이 두원의 위치관계에 따라서 타겟 터렛이 위치할 수 있는 경우의 수를 계산할 수 있다.

if dis == 0 and r1 == r2: #두원이 동심원이고 반지름이 같을 때
        print(-1)
    elif abs(r1-r2) == dis or r1 + r2 == dis: #내접 or 외접
        print(1)
    elif abs(r1-r2) < dis <(r1+r2): #다른 두점에서 만날 때
        print(2)
    else:
        print(0)