이차배열이 주어질 때 1을 갖는 인덱스의 대각선, 상하좌우는 모두 위험지역이다
안전지대의 개수를 반환
public int solution(int[][] board) {
int answer = 0;
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
if(board[i][j]==1) {
if(j>0)board[i][j-1]=danger(board[i][j-1]);
if(j!=board.length-1)board[i][j+1]=danger(board[i][j+1]);
if(i>0&&j>0)board[i-1][j-1]=danger(board[i-1][j-1]);
if(i>0&&j!=board.length-1)board[i-1][j+1]=danger(board[i-1][j+1]);
if(j>0&&i!=board.length-1)board[i+1][j-1]=danger(board[i+1][j-1]);
if(j!=board.length-1&&i!=board.length-1)board[i+1][j+1]=danger(board[i+1][j+1]);
if(i!=board.length-1)board[i+1][j]=danger(board[i+1][j]);
if(i>0)board[i-1][j]=danger(board[i-1][j]);
}
}
}
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
if(board[i][j]==0)answer++;
}
}
return answer;
}
public int danger(int x) {
if(x==1) return 1;
else return 2;
}
위험지역을 모두 1로 설정하면 다음 연산시 1을 폭탄지역으로 보아 연쇄적으로 위험지역으로 카운트
> 폭탄이 없는 폭탄 주변의 위험지역은 2로 변경 후 안전지대 계산시 0을 카운트
문제는 모서리 부근에 폭탄이 있으면 인덱스 범위를 벗어나기 때문에
위험지역을 설정할 때 상하좌우, 대각선이 범위 내인지 체크하거나
주어진 배열보다 양옆, 위아래로 2씩 큰 배열을 만들고 count 할때는 주어진 배열만큼만 count 한다.
public int solution2(int[][] board) {
int answer = 0;
int[][] boardEx = new int[board.length+2][board.length+2];
for (int i = 1; i <= board.length; i++) {
for (int j = 1; j <= board.length; j++) {
boardEx[i][j] = board[i-1][j-1];
}
}
for (int i = 1; i < boardEx.length; i++) {
for (int j = 1; j < boardEx[i].length; j++) {
if(boardEx[i][j]==1) {
boardEx[i][j-1]=danger(boardEx[i][j-1]);
boardEx[i][j+1]=danger(boardEx[i][j+1]);
boardEx[i-1][j-1]=danger(boardEx[i-1][j-1]);
boardEx[i-1][j+1]=danger(boardEx[i-1][j+1]);
boardEx[i+1][j-1]=danger(boardEx[i+1][j-1]);
boardEx[i+1][j+1]=danger(boardEx[i+1][j+1]);
boardEx[i+1][j]=danger(boardEx[i+1][j]);
boardEx[i-1][j]=danger(boardEx[i-1][j]);
}
}
}
for (int i = 1; i < boardEx.length-1; i++) {
for (int j = 1; j <boardEx[i].length-1; j++) {
if(boardEx[i][j]==0)answer++;
}
}
return answer;
}
'Java > Coding Test' 카테고리의 다른 글
OX 퀴즈 문제풀이 (0) | 2023.09.17 |
---|---|
연속된 수의 합 문제풀이 (0) | 2023.09.17 |
겹치는 선분의 길이 문제풀이 (0) | 2023.09.17 |
이진수 더하기 문제풀이 (0) | 2023.09.17 |
한번만 등장한 문자 문제풀이 (0) | 2023.09.17 |