ps:problems:boj:1261
알고스팟
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 1261 |
문제명 | 알고스팟 |
레벨 | 골드 4 |
분류 |
0-1 BFS |
시간복잡도 | O(nm) |
인풋사이즈 | n<=100, m<=100 |
사용한 언어 | Python |
제출기록 | 34896KB / 180ms |
최고기록 | 72ms |
해결날짜 | 2022/09/22 |
풀이
- 벽을 부수면서 이동할때의 비용을 1, 벽을 안부수면서 이동할때의 비용을 0이라고 생각하면, 그냥 그리드상에서 최단 경로를 구하는 문제가 된다. 녹색 옷 입은 애가 젤다지?를 비롯해서 흔히 접할수 있는 유형이다.
- 다만 이 경우는 비용이 0 또는 1 이렇게만 있기 때문에, 일반적인 데이크스트라 알고리즘 (Dijkstra's algorithm) 대신에 0-1 BFS를 사용해서 좀더 빠르게 풀수 있다. 이경우의 시간 복잡도는 O(V+E)인데, V와 E가 모두 O(NM)이므로 총 시간복잡도는 O(NM)이 된다.
코드
"""Solution code for "BOJ 1261. 알고스팟".
- Problem link: https://www.acmicpc.net/problem/1261
- Solution link: http://www.teferi.net/ps/problems/boj/1261
Tags: [0-1 BFS]
"""
import sys
from teflib import graph as tgraph
from teflib import search
def main():
M, N = [int(x) for x in sys.stdin.readline().split()]
grid = ''.join(input() for _ in range(N))
graph = tgraph.GridGraph(N, M)
dists = search.zero_one_distances(
lambda u: [(v, int(grid[v])) for v in graph[u]], 0, dest=M * N - 1)
print(dists[M * N - 1])
if __name__ == '__main__':
main()
- Dependency: teflib.search.zero_one_distances
ps/problems/boj/1261.txt · 마지막으로 수정됨: 2022/09/22 07:25 저자 teferi
토론