자바 알고리즘 문제

안전지대

쿠키키키키 2024. 4. 9. 16:21

다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다. 

 

지뢰는 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