프로그래머스 무인도 여행 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);
}