[백준] 1002 터렛

이제훈·2024년 2월 8일

알고리즘

목록 보기
9/23

'터렛' 문제는 평면에서 점 a,b의 위치가 주어지고 a,b와 c의 거리가 주어질 때 c가 될 수 있는 좌표의 수를 구하는 문제이다.

첫 번째로 시도했던 방법은 a,c / b,c의 거리를 각각 구해서 일치하는 모든 좌표들의 수를 구하는 방법이었다.
가장 정확한 방법이고, 수학적인 지식이 전혀 필요없지만 모든 좌표들의 수를 확인해야 하기 때문에 시간 초과가 발생했다.

두 번째로 시도했던 방법은 c의 위치와 상관없이 a와 b에서 주어진 거리를 나타내는 두 원의 교점을 구하는 방법이다. 두 원의 중심점이 되는 a와 b의 위치와 반지름의 길이와 a,b 사이의 거리를 이용하는 풀이법이다.

  1. 중심이 같은 경우

    1.1. 반지름이 같은 경우 -> 같은 원 -> 무한대

    1.2. 반지름이 다른 경우 -> 동심원 -> 0

  2. 중심이 다른 경우

    2.1. 두 중심의 거리가 반지름의 합보다 큰 경우 -> 두 원이 서로 겹치지 않음 -> 0

    2.2. 두 중심의 거리가 반지름의 합과 같은 경우 -> 두 원이 바깥에서 외접 -> 1

    2.3. 두 중심의 거리가 r1 - r2 보다 작은 경우 -> 두 원이 안에서 겹치지 않음 -> 0

    2.4. 두 중심의 거리가 r1 - r2와 같은 경우 -> 두 원이 안에서 내접

    2.5. 두 중심의 거리가 두 점에서 교접하는 경우 -> 안과 밖에서 내접, 외접 -> 2

오늘 알고리즘 문제는 거의 하루 종일 이 문제만 풀었다고 봐도 무방하다.
두 번째 방법으로 시도했을 때 문제를 풀 수 있을거라는 확신이 있었지만 모든 경우의 수를 확인하는 경우를 체크하는 것이 어려웠다.

출처
백준 1002 터렛 https://www.acmicpc.net/problem/1002

0개의 댓글