문제 링크
- http://icpc.me/1830
사용 알고리즘
- 각종 기하 알고리즘
시간복잡도
- $O(N \log N)$
풀이
맨해튼 거리를 45도 회전시키면 체비셰프 거리가 된다는 점을 활용하면 문제를 해결할 수 있습니다.
유클리드 거리에서 최대 거리는 Convex Hull을 구한 뒤 Rotating Calipers를 사용하면 $O(N \log N)$에 구할 수 있습니다.
유클리드 거리에서 최소 거리는 분할 정복이나 스위핑을 이용해 $O(N \log N)$에 구할 수 있습니다.
맨해튼 거리에서 최대 거리는 45도 회전시키면 체비셰프 거리에서의 최댓값을 구하는 문제가 되므로 $O(N)$에 구할 수 있습니다.
맨해튼 거리에서 최소 거리는 유클리드 거리에서 최소 거리를 구하는 것처럼 분할 정복을 이용해 $O(N \log N)$에 구할 수 있습니다.
체비셰프 거리에서 최대 거리는 x, y좌표의 최소/최대를 구하면 되므로 $O(N)$에 구할 수 있습니다.
체비셰프 거리에서 최소 거리는 45도 회전시키면 맨해튼 거리에서의 최솟값을 구하는 문제가 되므로 $O(N \log N)$에 구할 수 있습니다.
전체 코드
1 |
|