Algorithm/BFS, DFS
[백준] 2178번 미로 탐색
등촌동 꼬북이
2020. 9. 4. 16:02
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)