본문 바로가기
Algorithm/BFS, DFS

[백준] 2178번 미로 탐색

by 등촌동 꼬북이 2020. 9. 4.

BFS 아주 기초 문제 인거 같다..

 

근데도 두시간 반이나 했는데 대충 느낌은 오는데 확실하게 못풀겠어서 

 

유투브의 영상을 보고 참고해서 완성함

 

이걸 풀고 나니 느낌은 어느 정도 오긴한다.. 뭔가 틀이 있는거 같은 기분임 

 

from collections import deque
import sys
def check(x, y):
    if x < 0 or y < 0 or x >= N or y >= M:
        return False
    if mapData[x][y] == 1:
        return True
    else:
        return False
    
N, M = map(int, sys.stdin.readline().split())
mapData = [[0]*M for _ in range(N)]
for i in range(N):
    temp  = sys.stdin.readline()
    for j in range(M):
        mapData[i][j] = int(temp[j])
        
counter = 0
visited = [[False for _ in range(M)] for _ in range(N)]
# init
qx = deque([0])
qy = deque([0])
qc = deque([1])
while qx:
    x = qx.popleft()
    y = qy.popleft()
    c = qc.popleft()
    if visited[x][y] == True:
        continue
    visited[x][y] = True
    if x == N - 1 and y == M -1:
        counter = c
        break
    # 상
    if check(x - 1, y):
        qx.append(x - 1)
        qy.append(y)
        qc.append(c + 1)
    # 하
    if check(x + 1, y):
        qx.append(x + 1)
        qy.append(y)
        qc.append(c + 1)
    # 좌
    if check(x, y - 1):
        qx.append(x)
        qy.append(y - 1)
        qc.append(c + 1)
    # 우
    if check(x, y + 1):
        qx.append(x)
        qy.append(y + 1)
        qc.append(c + 1)
print(counter)

 

 

댓글