https://programmers.co.kr/learn/courses/30/lessons/1844
처음엔 DFS 로 풀었는데, 효율성을 통과하지 못해서 BFS 로 바꾸었다.
비가중치 그래프에서 두 정점 사이의 최단 경로를 찾고 싶을 때 - BFS 사용
가중치 그래프에서의 최단 경로 찾기 - 다익스트라 알고리즘 사용.
그 이후에도 효율성이 통과 안되길래 계속 연구해보았더니 큐에 넣기 전에 방문 체크를 해야 중복으로 큐에 넣는 일이 없어지고 효율성 테스트도 통과된다.
나같이 헤맨 사람들을 위해 글을 적어두었다.
https://programmers.co.kr/questions/23794
function solution(maps) {
var answer = -1;
let row = maps.length, col = maps[0].length;
let dy = [0, 1, 0, -1], dx = [-1, 0, 1, 0];
let queue = [[0, 0, 1]];
while (queue.length){
var answer = -1;
let [y,x,count] = queue.shift();
if (y === row-1 && x === col-1) return count;
//maps[y][x] = 0;
for (let i = 0; i < 4; i++){
let ny = y + dy[i];
let nx = x + dx[i];
if (ny < 0 || ny >= row || nx < 0 || nx >= col) continue;
if (maps[ny][nx] === 0) continue;
maps[ny][nx] = 0; // 큐에 넣을 때 방문표시를 해야한다.
queue.push([ny, nx, count+1])
}
}
return answer;
}