
class Solution {
public int solution(int[][] board) {
int answer = 0;
int n = board.length;
int [][] newBoard = new int [n][n]; //새로운 보드에 지뢰와 위험지역 표시
for(int i=0; i<n; i++){ //행
for(int j=0; j<n; j++){ //열
if(board[i][j] == 1){
newBoard[i][j] = 1; //지뢰 위치
if (i > 0) newBoard[i - 1][j] = 1; //위
if (i < n - 1) newBoard[i + 1][j] = 1; //아래
if (j < n - 1) newBoard[i][j + 1] = 1; //오른쪽
if (j > 0) newBoard[i][j - 1] = 1; //왼쪽
if (i > 0 && j > 0) newBoard[i - 1][j - 1] = 1; //왼쪽 위 대각선
if (i < n - 1 && j > 0) newBoard[i + 1][j - 1] = 1; //왼쪽 아래 대각선
if (i > 0 && j < n - 1) newBoard[i - 1][j + 1] = 1; //오른쪽 위 대각선
if (i < n - 1 && j < n - 1) newBoard[i + 1][j + 1] = 1; //오른쪽 아래 대각선
}
}
}
//새로운 보드에서 안전한 지역 count
for(int i=0; i<n; i++){ //행
for(int j=0; j<n; j++){ //열
if(newBoard[i][j] == 0){
answer++;
}
}
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/120866