티스토리 뷰
문제 링크
https://www.acmicpc.net/problem/1002
두 터렛의 위치 정보와 각 터렛에서 계산한 상대편 마린과의 거리가 주어질 때 마린이 있을 수 있는 위치를 출력하는 문제다.
마린이 있을 수 있는 위치는 '터렛 중심으로부터 거리가 일정한 점들의 집합'이다. 즉, 원으로 볼 수 있다.
터렛이 두 대이므로 두 원끼리 겹치는 점의 개수가 답일 것이다.
두 원이 어떤 상황에서 어떻게 겹치는지 알기 위해 다음 6가지 케이스를 보면 된다.
1) 어떤 원이 다른 원에 포함되지 않으면서, 두 원이 접하지 않을 때
2) 외접할 때
3) 두 점에서 만날 때
4) 내접할 때
5) 작은 원이 큰 원 내부에 있으면서, 두 원이 접하지 않을 때
6) 두 원이 같은 원일 때
$dist < r1 + r2$ 이다.
이 경우 마린은 하나인데 두 원이 겹치는 부분이 없으므로 답은 0이다.
$dist = r1 + r2$ 이다.
이 경우 한 점에서 만나므로 답은 1이다.
3), 4), 5)는 모두
$dist \leq r1 + r2$이므로 반지름의 합으로 판단 할 수 없다.
따라서 $r1 - r2$값에 대해 생각해야 한다.
$dist > r1 - r2$ 이다.
두 점에서 만나므로 답은 2이다.
$dist = r1 - r2$ 이다.
한 점에서 만나므로 답은 1이다.
$dist < r1 - r2$ 이다.
원이 만나지 않으므로 답은 0이다.
이 경우는 $dist < r1 + r2$이지만 엄연히 다른 경우이므로 먼저 확인해준다.
이때 가능한 위치의 개수는 무한대이다.
위 설명을 바탕으로 그대로 코드로 옮기면 된다.
정답 코드
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[BOJ] 백준 1004 어린 왕자 (0) | 2018.06.28 |
---|---|
[BOJ] 백준 1003 피보나치 함수 (0) | 2018.06.28 |
[BOJ] 백준 2747 피보나치 수 (0) | 2018.06.28 |
[BOJ] 백준 1001 A - B (0) | 2018.06.27 |
[BOJ] 백준 1000 A + B (0) | 2018.06.27 |