2018. 1. 15. 21:28, 알고리즘/BOJ
https://www.acmicpc.net/problem/2206
모든 벽에 대해, 그 벽을 부수고 DFS를 수행하는 방식으로 처리한다면 시간복잡도는 O(N^2M^2)으로 시간 내에 해결이 어렵습니다. 대신 아래와 같은 아이디어로 시간복잡도를 O(NM)으로 만들 수 있습니다. (참고로 저는 인덱스를 (0, 0) to (N-1, M-1)로 뒀습니다.)
최단거리는
i) 벽을 파괴하지 않고 (0, 0)에서 (N-1, M-1)까지 가는 거리이거나
ii) 임의의 벽에 대해, 그 벽과 인접한 4개의 칸 중에서 (0,0)과 가장 가까운 것의 거리 + 인접한 4개의 칸 중에서 (N-1,M-1)과 가장 가까운 것의 거리 + 1 중 하나입니다.
i)은 자명하게 O(NM)에 구할 수 있고 ii) 또한 미리 모든 방문 가능한 칸에 대해 (0, 0)과의 거리와 (N-1, M-1)과의 거리를 계산해두면 O(NM)에 구할 수 있습니다.
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 11559번: Puyo Puyo (0) | 2018.01.16 |
---|---|
[BOJ] 1072번: 게임 (0) | 2018.01.15 |
[BOJ] 2217번: 로프 (0) | 2018.01.15 |
[BOJ] 14888번: 연산자 끼워넣기 (0) | 2018.01.15 |
[BOJ] 5397번: Keylogger (0) | 2018.01.15 |
[BOJ] 11723번: 집합 (0) | 2018.01.13 |
Comments