문제
동빈이는 NxM 크기의 미로에 갇혀 있다. 동빈이의 위치는 (1,1)이고 출구는 (N,M)의 위치에 존재한다. 괴물이 있는 부분은 0으로, 이동 가능한 길은 1로 표시한다. 이 때 동빈이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하시오
입력 조건
1. 첫째 줄에 맵의 크기 N,M을 입력받는다.
2. 둘째 줄에 맵의 모양을 공백없이 입력받는다.
출력 조건
1. 동빈이가 탈출하기 위해 이동하는 블럭의 최소 개수를 출력한다.
내 코드
n,m = list(map(int,input().split()))
mmap = []
for i in range(n):
mmap.append(list(map(int,input())))
from collections import deque
def maze(x,y):
queue = deque()
queue.append((x,y))
while queue:
# 현재 노드 삭제
x,y = queue.popleft()
for dx,dy in (1,0),(0,1),(-1,0),(0,-1):
nx,ny = x+dx, y+dy
if nx < 0 or ny < 0 or nx>=n or ny>=m:
continue
if mmap[nx][ny]==0:
continue
# 처음 방문하는 노드인 경우 기록
# 이동한 노드는 다시 큐 리스트에 삽입
if mmap[nx][ny] == 1:
mmap[nx][ny] = mmap[x][y] +1
queue.append((nx,ny))
return mmap[n-1][m-1]
print(maze(0,0))
참고
이것이 코딩테스트다 with Python (나동빈 저)