개인 공부 공간/Algorithm

BOJ(백준) 2178번 미로 탐색 파이썬

Hoon Kang 2021. 3. 22. 22:17
 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net


코드

import sys
r=sys.stdin.readline
N,M=map(int,r().split())
maze=[]
for _ in range(N):
    maze.append([int(i) for i in r().rstrip()])
dx=[1,-1,0,0]
dy=[0,0,1,-1]
q=[]
for y in range(N):
    for x in range(M):
        if maze[y][x]:
            q.append((x,y))
            while q:
                temp=q[0]
                q=q[1:]
                for i in range(4):
                    new_x=temp[0]+dx[i]
                    new_y=temp[1]+dy[i]
                    if 0<=new_x<M and 0<=new_y<N and maze[new_y][new_x]==1:
                        q.append((new_x,new_y))
                        maze[new_y][new_x]=maze[temp[1]][temp[0]] + 1
print(maze[N-1][M-1])

 

해설

maze 에서 상하좌우로 탐색을 하며 문제의 조건에 따라 이동할 수 있는 칸에 대해서는 1씩 더해주었다. 그 후 maze 의 마지막 인덱스값을 출력하였다.

 

결과

미로탐색결과.PNG