function solution(maps) {
let answer = [];
// ✅ 문자열을 모두 숫자로 바꿔준다
maps = maps
.map(x => x.split('').map(y => {
if (y === 'X') return 0;
else return +y;
}));
// ✅ 행과 열의 개수
const [r, c] = [maps.length, maps[0].length];
// ✅ 상, 하, 좌, 우
const dx = [0, 1, 0, -1];
const dy = [-1, 0, 1, 0];
// ✅ 깊이우선탐색(DFS) 함수
function dfs(x, y) {
maps[x][y] = 0;
for (let i = 0; i < 4; i++) {
let nx = x + dx[i];
let ny = y + dy[i];
if (nx >= 0 && ny >= 0 && nx < r && ny < c && maps[nx][ny] !== 0) {
tmp += maps[nx][ny];
dfs(nx, ny);
}
}
}
// ✅ 문제풀이 시작
let tmp;
for (let i = 0; i < r; i++) {
for (let j = 0; j < c; j++) {
// ✅ 하나의 섬에 대해 연산이 끝난 경우에는 식량의 총합을 초기화 한다
tmp = 0;
if (maps[i][j] !== 0) {
tmp += maps[i][j];
dfs(i, j);
if (tmp !== 0) answer.push(tmp);
}
}
}
return answer.length > 0 ? answer.sort((a, b) => a - b) : [-1];
}
2 by 2 행렬을 보고 나서 바로 DFS나 BFS 탐색 알고리즘이 떠올랐다.
풀이는 DFS 알고리즘을 사용했다.
조건을 만족하는 지점들을 끝까지 파고 들면서 방문한 지점은 방문 처리를 해줬다.