[백준 문제풀이] 1002번 터렛 - python

KIM 쥬얼리 (vs0610)·2021년 1월 15일
0
post-thumbnail

💁🏻‍ ♂️문제설명

🧑🏻‍🏫 논리 서술

'터렛'이라는 추억의 게임 '스타크래프트' 속 건물의 이름을 들으니 추억에 빠져 문제의 본질을 깨닫기가 오려걸렸지만 문제의 본질은 단순했다. 문제 속에 터렛은 단 두개가 등장한다. 터렛의 위치는 2차원 평면의 좌표로 표기가 된다.

터렛의 위치 (x, y)

터렛과 타겟 사이의 거리를 각각 r1, r2로 준다. 각각 터렛의 위치로부터 거리를 측정했을 때 조건을 만족하는 타겟의 개수를 출력하는 문제가 된다.

이는 터렛의 위치를 원의 중심으로 보고 터렛과 타겟 사이의 거리를 그 원의 반지름으로 보았을 때 두 원이 교차하면서 만들어 내는 점의 개수를 출력하는 문제라고 볼 수 있다. 그러면서 단순하게 중학교 수학 정도의 문제로 탈바꿈하게 된다.

원과 원 사이의 거리와 두 반지름의 합을 이용하여 문제를 풀도록 한다.

1 . 두 원이 같은 원일 때

이 경우는 원의 중심도 같고 두 반지름도 같을 경우이다. 이 경우에는 타겟이 존재하는 위치가 무한대를 가지므로 문제의 조건에 따라 -1을 출력한다.

2 . 두 원이 동심원일때

이 경우는 원의 중심은 같지만 두 반지름이 다를 경우이다. 타겟이 존재할 수 있는 위치가 없으므로 0을 출력한다.

3 . 원 사이의 거리보다 반지름의 합이 작은 경우

이 경우부터는 원의 중심이 다른 경우이다. 두 원사이의 거리(점과 점사이의 공식으로 도출)이 두 원의 반지름의 합보다 클 때 두 원은 만날 수 없게 된다. 이럴 경우에는 타겟이 존재할 수 있는 점이 존재하지 않으므로 0을 출력한다.

4 . 원 사이의 거리와 반지름의 합이 같은 경우

두 원사이의 거리와 두 반지름의 합이 같은 경우에는 두 원의 교점이 1개가 된다. 1을 출력한다.

5 . 한 원이 다른 원을 포함하고 교점이 하나인 경우

이 경우에는 큰 원의 반지름이 두 원 사이의 거리의 합과 작은 원의 반지름의 합과 같을 때 생기는 경우로서 교점은 1개가 된다. 이때는 1을 출력한다.

6 . 4번과 5번 사이인 경우

4번에서부터 B의 반지름이 계속 커진다고 상정하여 5번의 상황까지 올 동안 두 원의 교점은 항상 2개가 된다. 2를 출력한다.

7 . 한 원이 다른 원을 온전히 포함할 경우(원의 중심이 다를 때, 같은 경우는 2번에서 다룸)

이 경우는 두 원의 교점이 존재하지 않으므로 0을 출력한다.

CODE

전체 코드는 아래와 같다. 위에서 설명안한 부분은 두 원 중 반지름의 크기가 큰 원을 알아야했기에 조건문으로 크기가 큰 원의 반지름을 r2로 무조건 만들어주었다.

0개의 댓글