문제 분석
- 1 : 이동 가능
- 0 : 이동 불가능
- (1,1)에서 출발하여 (n, m)의 위치로 이동할 때 지나야 하는 최소 칸의 수
코드 설계
- 최단 거리 → bfs
정답 코드
import sys
input = sys.stdin.readline
from collections import deque
n, m = map(int, input().split())
maze = [list(input().strip()) for _ in range(n)]
v = [[False] * m for _ in range(n)]
dh = [-1, 1, 0, 0]
dw = [0, 0, -1, 1]
d = deque()
d.append((0,0,1))
v[0][0] = True
ans_distance = float('inf')
while d :
h, w, dis = d.popleft()
if h == (n-1) and w == (m-1) :
ans_distance = min(ans_distance, dis)
break
for i in range(4) :
nh = h + dh[i]
nw = w + dw[i]
if nh < 0 or nh >= n or nw < 0 or nw >= m :
continue
if v[nh][nw] :
continue
if maze[nh][nw] != '1' :
continue
d.append((nh, nw, dis+1))
v[nh][nw] = True
print(ans_distance)
'코딩 테스트 > 백준' 카테고리의 다른 글
[Python] 백준 1927 최소 힙 (0) | 2025.02.20 |
---|---|
[Python] 백준 2839 설탕 배달 (0) | 2025.02.20 |
[Python] 백준 2580 스도쿠 (0) | 2025.02.18 |
[Python] 백준 11725 트리의 부모 찾기 (0) | 2025.02.14 |
[Python] 백준 1991 트리 순회 (0) | 2025.02.14 |