https://school.programmers.co.kr/learn/courses/30/lessons/1844
from collections import deque
# 방향 리스트 생성
dx = [-1, 1, 0, 0] # 상 하 좌 우
dy = [0, 0, -1, 1]
def bfs(x, y, maps): # 시작점
queue = deque([(x, y)])
while queue:
x, y = queue.popleft()
# 현 위치에서 네 방향으로의 위치 확인
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# 미로 찾기 공간을 벗어나는 경우 무시
if not (0 <= nx < len(maps) and 0 <= ny < len(maps[0])):
# if nx < 0 or ny < 0 or nx >= len(maps) or ny >= len(maps[0]):
continue
# 벽인 경우
if maps[nx][ny] == 0:
continue
# 해당 노드를 처음 방문하는 경우에만 최단 거리 기록
if maps[nx][ny] == 1:
maps[nx][ny] = maps[x][y] + 1
queue.append((nx, ny))
# 목적지에 도착가능한지 확인
if maps[len(maps) - 1][len(maps[0]) - 1] == 1:
return -1
# 가장 오른쪽 아래까지 최단 거리 반환
return maps[len(maps) - 1][len(maps[0]) - 1]
def solution(maps):
return bfs(0, 0, maps)