BOJ
BOJ 2178. 미로 탐색 (Python)
rubato.dev
2025. 8. 19. 13:52
문제
내가 생각한 풀이
시작 지점이 무조건 (1, 1)이므로 queue에 (0, 0)을 넣고 BFS 수행
visited 배열이 아닌 dist 배열 (거리값을 가지는 2차원 배열)을 사용
BFS를 돌 때 popleft한 값이 도착지점의 좌표와 같으면 BFS 종료
BFS가 종료되면 dist 배열의 도착좌표 값을 출력
코드 (Python)
import sys
from collections import deque
input = sys.stdin.readline
N, M = map(int, input().split())
graph = [input().strip() for _ in range(N)]
dist = [[-1] * M for _ in range(N)]
direction = [(-1, 0), (1, 0), (0, -1), (0, 1)]
def bfs():
queue = deque([(0, 0)])
dist[0][0] = 1
while queue:
xp, yp = queue.popleft()
if xp == N-1 and yp == M-1:
return
for dx, dy in direction:
nx, ny = xp + dx, yp + dy
if not (0 <= nx < N and 0 <= ny < M):
continue
if graph[nx][ny] == "1" and dist[nx][ny] == -1:
queue.append((nx, ny))
dist[nx][ny] = dist[xp][yp] + 1
bfs()
print(dist[N-1][M-1])