문제 링크
- http://icpc.me/19586
사용 알고리즘
- 볼록껍질
- 로테이팅 캘리퍼스
시간복잡도
- $O(N \log N)$
풀이
임의의 2차원 점 집합의 Minimum Bounding Box는 그 점들의 Convex Hull의 Minimum Bounding Box와 같다는 사실은 쉽게 알 수 있습니다.
더 나아가, Convex Hull의 한 변과 겹치는(무수히 많은 교점이 존재하는) Minimum Bounding Box가 존재한다는 사실이 잘 알려져 있습니다.
Convex Hull을 구한 뒤, Convex Hull의 각 변에 대해 Bounding Box를 구하고, 그 중 최소 둘레를 구해봅시다.
반대쪽(180도) 변에 접하는 점은 Rotating Calipers를 이용해서 구할 수 있습니다. 이 방법을 응용하면, 오른쪽(90도), 왼쪽(270도) 변에 접하는 점도 Rotating Calipers를 이용해서 구할 수 있습니다.
벡터의 내적/외적을 잘 활용하면 됩니다.
전체 코드
1 |
|