이 문제는 최단거리를 찾는 것이라서 BFS로 푸는 것이 빠르다.
from collections import deque
def solution(maps):
answer = 0
n = len(maps)
m = len(maps[0])
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(X, Y):
queue = deque()
queue.append((X,Y))
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<= nx <= n-1 and 0 <= ny <= m-1 and maps[nx][ny] == 1:
queue.append((nx, ny))
maps[nx][ny] = maps[x][y] + 1
return maps[n-1][m-1]
result = bfs(0,0)
if result == 1:
return -1
else:
return result
map에 그대로 거리를 표시하고 maps[nx][ny] == 1로 비교함으로써 처음 방문한 것인지 그리고 장애물인지를 한번에 판단할 수 있다.
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] Lv2. 의상 파이썬 해시 (0) | 2024.02.29 |
---|---|
[백준] 이분 그래프 DFS 다시 풀기 (0) | 2024.02.23 |
[백준] 10026번 적록색약 DFS, BFS (0) | 2024.02.21 |
[백준] 2606번 바이러스 DFS, BFS (0) | 2024.02.21 |
[백준] 1012번 유기농 배추 DFS, BFS (2) | 2024.02.21 |