관리 메뉴

100세까지 코딩

[프로그래머스] Lv0.안전지대 본문

코딩테스트/자바

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

100세까지 코딩 2023. 8. 13. 17:19
문제 설명

 

풀기 전 생각
  • 안전지대 : 0, 폭탄 : 1, 위험 지대 : 2로 두기
  • 내가 입력하는거면 n*n 이면 (n+1) * (n+1)로 두고 (1,1)부터 시작
  • 그러나, 매개변수로 이미 n*n을 받고 있기 때문에
    모서리나 경곗값에서는 ArrayIndexOutOfBoundsException가 안 뜨게 처리해 준다
class Solution {
    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){  // 폭탄이면?
                    for(int m = i-1; m < i+2; m++){  // 위, 중간, 아래
                        for(int n = j-1; n < j+2; n++){ // 왼, 중간, 오른
                            if(m < 0 || n < 0 || m > board.length-1 || n > board.length-1){
                                continue; // arrayIndex를 넘어갈시 continue;로 넘어가기
                            }else{
                                if(board[m][n] != 1){ // 위, 아래, 좌, 우 대각선 칸이 폭탄이 아니면
                                    board[m][n] = 2;  // 위험지대로 바꿈
                                }
                            }
                        }
                    }
                }
            }
        }
        for(int i = 0 ; i < board.length; i++){  // 행 순회
            for(int j = 0; j < board.length; j++){ // 열 순회
                if(board[i][j]==0){
                    answer++;  // 안전지대면 answer+1;
                }
            }
        }
        return answer;
    }
}
for문이 많아 복잡해 보이지만 Lv0이라 쉬웠다