728x90

생각보다 쉽게 풀었다. 함수에서 굳이 return 을 하지 않아도 되는 경우를 구별하는 게 중요한 것 같다.2차원 리스트 초기화 부분을 명확히 해야겠다.

 
import sys
from collections import deque
 
def bfs(a,b,N,M):
 
    dx = [0,0,1,-1]
    dy = [1,-1,0,0]
 
    queue = deque()
 
    queue.append([a,b])
 
    while queue:
 
        x,y = queue.popleft()
 
        for i in range(4):
            temp_x = x + dx[i]
            temp_y = y + dy[i]
 
            if visited[temp_x][temp_y] == False:
                if 0<=temp_x<N and 0<=temp_y<M and k[temp_x][temp_y]!=0:
 
                    k[temp_x][temp_y] = k[x][y] + 1
                    visited[temp_x][temp_y] = True
 
                    queue.append([temp_x,temp_y])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
N,M = list(map(int,sys.stdin.readline().split(" ")))
 
k = [ ]
 
for i in range(N):
    k.append(list(map(int,list(sys.stdin.readline().rstrip()))))
 
visited = [[False]*(M+1) for i in range(N+1)]
 
for i in range(0,len(k)):
    for j in range(0,len(k[i])):
 
        if visited[i][j] == False and k[i][j] !=0:
            bfs(i,j,N,M)
 
 
print(k[-1][-1])
 
728x90

+ Recent posts