#
문제 설명
지도에는 바다와 무인도들에 대한 정보가 표시
지도를 보고 각 섬에서 얼마나 머무를 수 있는지 알아보기
조건
X
: 바다숫자
: 무인도 땅에 있는 식량매개 변수
maps
반환값
maps | result |
---|---|
["X591X","X1X5X","X231X", "1XXX1"] | [1, 1, 27] |
["XXX","XXX","XXX"] | [-1] |
function solution(maps) {
const answer = [];
const n = maps[0].length;
const m = maps.length;
const getIsland = (start, maps) => {
const dx = [-1,1,0,0];
const dy = [0,0,-1,1];
const q = [start];
let sum = +maps[start[0]][start[1]];
maps[start[0]][start[1]] = "X";
while (q.length) {
const [x, y] = q.pop();
for (let i = 0; i < 4; i++) {
const nx = x + dx[i];
const ny = y + dy[i];
if (nx >= 0 && nx < m && ny >= 0
&& ny < n && maps[nx][ny] !== "X") {
q.push([nx, ny]);
sum += +maps[nx][ny];
maps[nx][ny] = "X";
}
}
}
return sum;
}
const board = maps.map((v) => [...v]);
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (board[i][j] !== "X"){
const island = getIsland([i, j], board);
answer.push(island);
}
}
}
return answer.length ? answer.sort((a, b) => a - b) : [-1];
}
풀이
BFS 완전 탐색을 통해 solution 구하기
- maps 를 이차배열 board 로 선언
- board 에서 X 가 아닌 idx 를 start 로 너비우선탐색
- 한 번 visit 한 격자는 "X" 로 변환
- answer 에 아무것도 없으면 [-1] 반환, 있으면 오름차순 정렬 후 반환