문제
풀이
$(w, h)$에서 $(1, 1)$로 갈 수 없다는 것은 왼쪽 혹은 아래쪽 벽이 오른쪽 혹은 위쪽 벽과 이어져 있다는 것과 동치입니다.
그래프 탐색 알고리즘을 통해 왼쪽 혹은 아래쪽 벽과 연결된 칸, 오른쪽 혹은 위쪽 벽과 연결된 칸을 각각 탐색합시다.
장애물을 설치할 수 있는지는 차치하고, 일단 설치했을 떄 미노타우르스가 갇히는지 판단해 봅시다.
장애물을 설치했을 때 $(w, h)$에서 $(1, 1)$로 갈 수 없으려면 장애물의 테두리보다 한칸 더 확장한 직사각형 내에 왼쪽 혹은 아래쪽 벽과 연결된 칸, 오른쪽 혹은 위쪽 벽과 연결된 칸이 모두 존재해야 합니다. 이는 누적 합을 통해 $O(1)$에 판단할 수 있습니다.
이제 이분 탐색을 통해 문제를 해결할 수 있습니다. 모든 좌표 $(i, j)$에 대해 이분 탐색을 통해 미노타우르스를 가둘 수 있는 가장 작은 정사각형 장애물의 크기를 구해줍시다. 실제로 해당 장애물을 설치할 수 있는지는 장애물 개수 누적 합을 이용해서 판단해주면 됩니다.
시간 복잡도는 $O(wh\log \max(w, h))$입니다.
코드
1 | |