function solution(board) {
var answer = 0;
let arr = Array.from(Array(board.length), () => Array(board.length).fill(0));
for(let i=0; i<board.length;i++){
for (let j=0; j<board[i].length; j++){
if(board[i][j]==1){
arr[i][j]=1;
arr[i]?.[j-1]==0 && (arr[i][j-1]=1)
arr[i]?.[j+1]==0 && (arr[i][j+1]=1)
arr[i-1]?.[j]==0 && (arr[i-1][j]=1)
arr[i-1]?.[j-1]==0 && (arr[i-1][j-1]=1)
arr[i-1]?.[j+1]==0 && (arr[i-1][j+1]=1)
arr[i+1]?.[j]==0 && (arr[i+1][j]=1)
arr[i+1]?.[j-1]==0 && (arr[i+1][j-1]=1)
arr[i+1]?.[j+1]==0 && (arr[i+1][j+1]=1)
}
}
}
arr.forEach(a=>a.forEach(b=>b==0 && (answer+=1)))
return answer;
}
💡 forEach( ) : 각 배열 요소에 대해 제공된 함수를 한 번씩 실행
💡 옵셔널 체이닝 ( ?. ) : 프로퍼티가 없는 중첩 객체를 에러 없이 안전하게 접근할 수 있는 연산자
정말 어렵고 생각을 많이 해봐야 하는 문제였던 것 같다.
처음에는 if문 남발에 노가다로 풀어서 코드도 엄청 길어지고 산으로 가는 느낌이었는데, 다시 알고리즘을 정리한 뒤 새롭게 푸니까 풀렸던 문제!
지뢰가 가장자리에 존재하는 경우 배열 인덱스가 존재하지 않아서 난관이었다.
그래도 옵셔널 체이닝으로 좀 더 짧게 코드를 짤 수 있었던 것 같다.