프로그래머스 - 안전지대

youngkyu MIn·2023년 10월 4일

문제링크 - 프로그래머스 - 안전지대

class Solution {
     public int solution(int[][] board) {
        int n = board.length;
        boolean[][] dangerZone = new boolean[n][n]; 
        int safeCount = n * n; 
       
        int[] dx = {-1, 1, 0, 0, -1, -1, 1, 1};
        int[] dy = {0, 0, -1, 1, -1, 1, -1, 1};
        
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
               
                if(board[i][j] == 1) {
                   
                    if(!dangerZone[i][j]) {
                        dangerZone[i][j] = true;
                        safeCount--;
                    }
                    for(int d = 0; d < 8; d++) {
                        int ni = i + dx[d];
                        int nj = j + dy[d];
                       
                        if(ni >= 0 && ni < n && nj >= 0 && nj < n && !dangerZone[ni][nj]) {
                            dangerZone[ni][nj] = true;
                            safeCount--;
                        }
                    }
                }
            }
        }
      
        return safeCount;
    }
}

겹치는 부분을 처리할 방법이 딱히 떠오르지가 않았음...

GPT 가 boolean 배열을 만들어서 체크해보라고 알려줌...

고마움...

profile
한 줄 소개

0개의 댓글