- bfs로 최단 경로를 찾아 준다.
- visited를 따로 두어 방문했던 정점을 다시 방문하지 않도록 함.
- bfs에서는 목적지에 처음 도달하였을 때가 최단 경로이므로 목적지에 도달하기만 하면 바로 return해주면 된다.
- queue가 비었을 때는 목적지로 갈수가 없는 케이스이므로 -1 리턴
from collections import deque
def bfs(maps):
queue = deque()
maxX = len(maps) - 1
maxY = len(maps[0]) - 1
visited = [[False] * (maxY + 1) for _ in range(maxX + 1)]
queue.append([0, 0, 1])
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
visited[0][0] = True
while queue:
cx, cy, c = queue.popleft()
if cx == maxX and cy == maxY:
return c
for i in range(4):
nx = cx + dx[i]
ny = cy + dy[i]
if 0 <= nx and nx <= maxX and 0 <= ny and ny <= maxY:
if visited[nx][ny] == False and maps[nx][ny] == 1:
visited[nx][ny] = True
queue.append([nx, ny, c+1])
return -1
def solution(maps):
return bfs(maps)
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 2 ] 가장 큰 수 (0) | 2021.06.22 |
---|---|
[ Lv 2 ] 뉴스 클러스터링 (0) | 2021.06.22 |
[ Lv 2 ] 소수 찾기 (0) | 2021.06.22 |
[ Lv 2 ] 더 맵게 (0) | 2021.06.21 |
[ Lv 2 ] 기능개발 (0) | 2021.06.21 |