알고리즘

[Lv_2] 게임 맵 최단거리

deedee2 2023. 8. 16. 20:32
728x90
function solution(maps) {
    // 큐 활용
    var q = [[0, 0, 1]];
    
    while (q.length) {
        var [y, x, answer] = q.shift();

        // 배열 범위 내 + 현 인덱스 값 체크 => 1이면 분기처리
        if (y < maps.length && y >= 0 && x < maps[0].length && x >= 0 && maps[y][x] === 1) {
            // 현 인덱스 방문금지 => 0 처리
            maps[y][x] = 0;


            // 상대방 진영 도달여부 체크
            if (y === maps.length - 1 && x === maps[0].length - 1) {
                // 큐의 매 실행마다 각 방향별로 순회하면서 진행되고,
                // 가장 먼저 도달한 값에서 return 된다.
                return answer;
            }
            
            // console.log(maps);
            
            // 미도달 => 네 방향 큐 추가!
            q.push([y + 1, x, answer + 1]);
            q.push([y - 1, x, answer + 1]);
            q.push([y, x + 1, answer + 1]);
            q.push([y, x - 1, answer + 1]);
        }
    }
    
    return -1;
}

코딩테스트 연습 - 게임 맵 최단거리 | 프로그래머스 스쿨 (programmers.co.kr)