다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다. 지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
class Solution {
public int solution(int[][] board) {
int answer = 0;
for(int i=0;i<board.length;i++){
for(int j=0;j<board[0].length;j++){
if(board[i][j]==1){
if(i>0){
//위험지역은 2 로
// 폭탄이 있는곳은 1로 고정
// 혹시나 폭탄이 있는 곳을 위험지역으로 바꾸지 않게
// 아래 코드를 씀
board[i-1][j]=(board[i-1][j] !=1) ? 2 : 1;
}
if(i<board.length-1){
board[i+1][j]=(board[i+1][j] !=1) ? 2: 1;
}
if(j>0) {
board[i][j-1]=(board[i][j-1] !=1) ? 2 : 1;
}
if(j<board.length-1){
board[i][j+1]=(board[i][j+1] !=1) ? 2 : 1;
}
if(i>0 && j>0){
board[i-1][j-1]=(board[i-1][j-1] !=1) ? 2 :1;
}
if(i>0 && j<board.length-1){
board[i-1][j+1]=(board[i-1][j+1] !=1) ? 2 : 1;
}
if(i<board.length-1&&j>0){
board[i+1][j-1]=(board[i+1][j-1] !=1) ? 2 :1;
}
if(i<board.length-1&&j<board.length-1){
board[i+1][j+1]=(board[i+1][j+1] !=1)? 2 : 1;
}
}
}
}
for(int i=0; i<board.length;i++){
for(int j=0;j<board.length;j++){
if(board[i][j]==0){
answer++;
}
}
}
return answer;
}
}
폭탄이 가장많은 위험 지역을 가질때는 최대 8칸이다. 근데 이 8칸도 각각의 조건을 맞춰야지 8칸이 된다.
그래서 그 조건을 8개 만들어서 이중 for 문안에 넣었다.
그리고 위험지역은 2로 표시 했다. 주의 할 것은 위험지역을 무조건 2로 표시하면 앞에 나올 폭탄이 있는 지역도
2로 변하게되어서 답이 틀리게 된다. 그래서 폭탄이 없는 지역만 2로 만들어주면 된다.
그리고 마지막에 0인 지역만 찾아서 그 수를 세주면 끝이다.!!!
'자바 알고리즘 문제' 카테고리의 다른 글
겹치는 선분의 길이 (10번 테스트만 실패) 도와주실분? (0) | 2024.04.12 |
---|---|
주사위 게임 3 (0) | 2024.04.11 |
분수의 덧셈 (0) | 2024.04.08 |
연속된 수의 합 (0) | 2024.04.06 |
다음에 올 숫자 (0) | 2024.04.06 |