[프로그래머스] 안전지대

AI·2024년 12월 28일
class Solution {
    public boolean indexCheck(int[][] board, int i, int j){
            return (i>=0 && i<board.length) && (j>=0 && j<board[0].length);
    }
    
    public int solution(int[][] board) {
        int answer = board.length*board.length;
        //board가 1이면 위, 아래, 좌, 우, 대각선 -1로 변경 -> answer 1씩 줄이기
        for(int i=0;i<board.length;i++){
            for(int j=0;j<board.length;j++){
            
                 for(int a = i-1; a<=i+1; a++){
                        for(int b =j-1; b<=j+1; b++){
                            if(indexCheck(board,a,b) && board[a][b]!=1 && board[a][b]==0) board[a][b]=-1;
                        }
                    }
                    
                }
            }
        }
        return answer;
    }
}

이렇게 하면 원래 배열이 바뀌기 때문에 좋지 않다.
그럼으로 액자 같이 테두리를 추가해서 안에 있는 값으로만 비교하고 그러면 인덱스를 벗어나는지도 따로 검사를 하지 않아도 된다.

int[][] temp = new int[length+2][length+2];

for(int i=1; i<length+1; i++){
	for(int j=1; j<length+1;j++){
    	temp[i][j]=board[i-1][j-1];
    }
}

0개의 댓글