프로그래머스 Lv.2 게임 맵 최단거리

Steve·2021년 11월 16일
0

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;
}
profile
게임과 프론트엔드에 관심이 많습니다.

0개의 댓글