완전탐색을 이용하여 [0,0] 부터, [n,m]까지 탐색한후, DFS를 이용하여 'X'가 아닌곳을 다 방문하자. 방문된 뒤에는 'X'로 바꿔주고, 증가된 값을 answer에 push하여 sort하여 리턴하자.
function solution(maps) {
var answer = [];
let dx = [-1,1,0,0];
let dy = [0,0,-1,1];
let road = Array.from(Array(maps.length), ()=>Array(maps[0].length).fill(0))
maps.forEach((data,idx)=>{
data.split('').forEach((d,i)=>{
road[idx][i] = d
})
})
for(var i =0; i<road.length; i++){
for(var k =0; k<road[i].length; k++){
let count =0;
if(road[i][k] !== 'X'){
let needVisit = [[i,k]];
while(needVisit.length){
let [x,y] = needVisit.pop();
if(road[x][y] !== 'X'){
count += parseInt(road[x][y])
road[x][y] = 'X';
}
for(var j = 0; j<4; j++){
let lX = x + dx[j];
let lY = y + dy[j];
if(lX < maps.length && lX>=0 && lY >= 0 && lY < maps[0].length && road[lX][lY] !== 'X'){
needVisit.push([lX,lY]);
}
}
}
answer.push(count)
}else{
continue;
}
}
}
return answer.length === 0 ? [-1] : answer.sort((a,b)=>a-b)
}
sort()함수 중 안에 파라미터가 없을경우엔 오름차순이 된다는 보장이 없다. 문자열의 배열일 경우 ['100', '20']일때는 오름차순이 ['100', '20']으로 정렬이 된다.(앞자리가 1이고 2이므로) 따라서 파라미터를 이용하여 바꿔주는 습관을 기르자!!