작성 코드 (1차 시도 / 통과)
function solution(maps) {
const result = []
maps = maps.map((m) => m.split(""))
const dfs = (dx, dy) => {
if (dx < 0 || dy < 0 || dx >= maps.length || dy >= maps[0].length || maps[dx][dy] === "X") return 0
const now = parseInt(maps[dx][dy])
maps[dx][dy] = "X"
return now + dfs(dx - 1, dy) + dfs(dx + 1, dy) + dfs(dx, dy - 1) + dfs(dx, dy + 1)
}
for (let x = 0; x < maps.length; x += 1) {
for (let y = 0; y < maps[x].length; y += 1) {
if (maps[x][y] !== "X") result.push(dfs(x, y))
}
}
return result.length ? result.sort((a, b) => a - b) : [-1]
}
구현 로직 (DFS)
DFS로 간단하게 해결할 수 있습니다.
1. maps 배열 요소 순회
2. 현재 위치가 X가 아니라면 현재 위치를 방문 처리("X")하고 시작점으로 상하좌우 DFS 수행
3. 수행 결과(영역 내 X가 아닌 모든 수들의 합)를 결과 배열 result에 담기
4. 정렬 결과 반환