본문 바로가기
프로그래밍/Baekjoon

(파이썬) 백준 알고리즘 2178번 미로 탐색

by J_Remind 2019. 1. 9.

문제

풀이 (Python)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from collections import deque
 
# dx[0], dy[0] => 오른쪽
# dx[1], dy[1] => 왼쪽
# dx[2], dy[2] => 아래
# dx[3], dy[3] => 위
dx = [001-1]
dy = [1-100]
 
n, m = map(int, input().split())
= [list(map(int, list(input()))) for _ in range(n)]
= deque()
check = [[False]*for _ in range(n)]
dist = [[0]*for _ in range(n)]
 
# 시작점
q.append((0,0))
check[0][0= True
dist[0][0= 1
 
while q:
    x, y = q.popleft()
    for k in range(4):
        nx, ny = x+dx[k], y+dy[k]
        if 0 <= nx < n and 0 <= ny < m:
            if check[nx][ny] == False and a[nx][ny] == 1:
                q.append((nx,ny))
                dist[nx][ny] = dist[x][y] + 1
                check[nx][ny] = True
 
print(dist[n-1][m-1])
 
 
cs
1. deque()를 사용했다.

2. check로 들렸던 곳은 True, 들리지 않은 곳은 False로 두었다.

3. q에 있는 값을 꺼낸다.

4. 위, 아래, 왼쪽, 오른쪽을 N,M 을 벗어나지 않고 들리지 않았으며 이동할 수 있는 칸을 모두 들린다.

5. 들렸던 곳을 q에 넣어주고 거리 값, check= True를 넣어준다.

6. 3 ~ 5를 q에 아무것도 없어질 때 까지 계속 반복한다.


# dx[0], dy[0] => 오른쪽
# dx[1], dy[1] => 왼쪽
# dx[2], dy[2] => 아래
# dx[3], dy[3] => 위


문제 출처