프로그래머스 무인도 여행 JavaScript

2023년 1월 26일

프로그래머스 무인도 여행

문제 풀이

DFS나 BFS로 간단하게 풀 수 있는 문제였다. 좀 더 편하게 탐색하기 위해 문자열을 split 하여 2차원 배열로 만든 mapsArr을 이용한다.
mapsArr를 차례로 탐색하다 'X'가 아닌 값을 만나면 que에 넣어주고 해당 좌표의 mapsArr의 값을 'X'로 바꾼다. 이후 que의 길이가 0이 될 때까지 상하좌우 좌표들을 조건에 맞으면 que에 저장하고 해당 좌표의 mapsArr의 값을 'X'로 바꾼다.
while 문을 나오면 하나의 무인도를 다 탐색했으므로 지금까지 모은 식량을 answer에 push 한다.

solution.js
function solution(maps) {
    let answer = [];
    const move = [[-1, 0], [0, 1], [1, 0], [0, -1]];
    const mapsArr = [];
    maps.forEach(element => {
        mapsArr.push(element.split(''));
    });
    const xLen = mapsArr.length;
    const yLen = mapsArr[0].length;

    for (let x = 0; x < xLen; x++) {
        for (let y = 0; y < yLen; y++) {
            if (mapsArr[x][y] !== 'X') {
                const que = [[x ,y]];
                let cnt = Number(mapsArr[x][y]);
                mapsArr[x][y] ='X';
    
                while (que.length > 0) {
                    const [tx, ty] = que.shift();
                    for (let i = 0; i < 4; i++) {
                        const dx = tx + move[i][0];
                        const dy = ty + move[i][1];
                        if (0<=dx && dx<xLen && 0<=dy && dy<yLen && mapsArr[dx][dy] !== 'X') {
                            que.push([dx, dy]);
                            cnt += Number(mapsArr[dx][dy]);
                            mapsArr[dx][dy] = 'X';
                        }
                    }
                }
                answer.push(cnt);
            }
        }
    }
    if (answer.length === 0) {
        return [-1]
    }
    return answer.sort((a, b) => a-b);
}

댓글