

다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.입출력 예
board result [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]] 16 [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 0, 0, 0, 0]] 13 [[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]] 0
- 2차원 배열 전체를 순회하면서 지뢰가 있는 위치를 발견
- 그 위치의 상하좌우 대각선을 탐색하여 안전 지역을 찾기.
- 모든 칸을 안전 지역으로 가정하고 시작.
- 지뢰 또는 지뢰 주변을 찾을 때마다 안전 지역의 수를 줄이기.
function solution(board) {
const dx = [-1, 0, 1, -1, 1, -1, 0, 1];
const dy = [-1, -1, -1, 0, 0, 1, 1, 1];
const n = board.length;
const m = board[0].length;
let safeArea = n * m;
for(let i = 0; i < n; i++){
for(let j = 0; j < m; j++){
if(board[i][j] === 1){
for(let k = 0; k < 8; k++){
const nx = i + dx[k];
const ny = j + dy[k];
if(nx >= 0 && nx < n && ny >= 0 && ny < m){
if(board[nx][ny] === 0){
board[nx][ny] = 2;
safeArea--;
}
}
}
safeArea--;
}
}
}
return safeArea;
}
정말 흥미진진했습니다! 2차원 배열에 대한 이해도가 향상되는 기분이에요. 좋은 글 감사합니다!