제한사항
- board는 n * n 배열입니다.
- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
입출력 예
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 |
입출력 예 설명
입출력 예 #1
- (3, 2)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선 총 8칸은 위험지역입니다. 따라서 16을 return합니다.
입출력 예 #2
- (3, 2), (3, 3)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선은 위험지역입니다. 따라서 위험지역을 제외한 칸 수 13을 return합니다.
입출력 예 #3
- 모든 지역에 지뢰가 있으므로 안전지역은 없습니다. 따라서 0을 return합니다.
import java.util.Arrays;
class Solution {
public int solution(int[][] board) {
int answer=0;
int[][] copyBoard = new int[board.length][board[0].length];
for (int i=0; i<board.length; i++){
for (int j=0; j<board[0].length; j++){
if (board[i][j]==1){
copyBoard[i][j]=1;
}
}
}
for (int i=0; i<board.length; i++){
for (int j=0; j<board[0].length; j++){
if (board[i][j]==1) {
mineRange(i,j,copyBoard);
}
}
}
for (int i=0; i<copyBoard.length; i++){
for (int j=0; j<copyBoard[0].length; j++){
if (copyBoard[i][j]==0) {
answer++;
}
}
}
return answer;
}
private void mineRange(int row, int col, int[][] board){
for (int r = row-1; r<=row+1; r++){
for (int c = col-1; c<=col+1; c++){
if(r<0 || r>=board.length || c<0 || c>=board[0].length){
continue;
}else{
board[r][c]=1;
}
}
}
}
}
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
나머지가 1이 되는 수 찾기 (0) | 2022.10.16 |
---|---|
삼각형의 완전조건 (2) (0) | 2022.10.16 |
하샤드 수 (1) | 2022.10.14 |
자연수 뒤집어 배열로 만들기 (0) | 2022.10.14 |
같은 숫자는 싫어 (0) | 2022.10.14 |