기본적인 BFS
문제.
import numpy as np
def solution(maps):
board = np.pad(maps, ((1,1),(1,1)), 'constant', constant_values=0).tolist() # 1칸씩 패딩
n, m = len(board)-2, len(board[0])-2 # 원본 맵 크기
d = [(0, 1), (1, 0), (0, -1), (-1, 0)] # 이동 벡터
que = [[1, 1, 1]] # h, w, cost
while que :
h, w, cost = que.pop(0)
if cost > n*m : continue # 목표지점까지 못가는 경우
if (h, w) == (n, m) : return cost # 목표지점 도달 했을 경우
for next_h, next_w in [[h+dh, w+dw] for dh, dw in d] :
if board[next_h][next_w] != 0 : # 벽이 아닌 경우
que.append([next_h, next_w, cost+1])
board[next_h][next_w] = 0 # 이미 지나간 길은 벽으로 막음
return -1