728x90

이차배열이 주어질 때 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

+ Recent posts