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

Yunki Kim·2023년 1월 8일
0

프로그래머스

목록 보기
82/101
post-thumbnail

문제


링크


코드

class Solution {
    public int solution(int[][] board) {
        int[][] boomBoard = new int[board.length][board[0].length];
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[i].length; j++) {
                if (board[i][j] == 1) checkExplosion(i, j, boomBoard);
            }
        }

        int count = 0;
        for (int[] array : boomBoard) {
            for (int value : array) {
                if (value == 0) count++;
            }
        }
        return count;
    }

    static void checkExplosion(int x, int y, int[][] boomBoard) {
        int explosionX;
        int explosionY;
        int[] aroundX = {0, -1, -1, -1, 0, 0, 1, 1, 1};
        int[] aroundY = {0, -1, 0, 1, -1, 1, -1, 0, 1};
        for (int i = 0; i < 9; i++) {
            explosionX = x + aroundX[i];
            explosionY = y + aroundY[i];
            if (explosionX < boomBoard.length && explosionY < boomBoard.length)
                if (explosionX >= 0 && explosionY >= 0) boomBoard[explosionX][explosionY] = 1;
        }
    }
}

리뷰

점점 level 0 문제가 아닌 것 같은 문제가 나온다.
(아니면 내가 실력이 부족한거지 😂)

문제를 설명하자면 폭탄이 있으면 그 주변의 상하좌우, 대각선은 위험지역이다.
그래서 주어진 배열에 폭탄표시가 있고 폭탄이 터지는 위험지역을 제외한 지역
즉, 안전지역의 숫자를 출력하는 문제이다.

주어진 폭탄의 위치를 표기한 배열과 동일한 크기를 가진 배열을 생성하여 폭탄을 포함한 위험지역을 체크하도록 구현하였다.

checkExplosion() 함수를 살펴보면 폭탄이 있는 위치를 포함하여 상하좌우와 대각선 모두를 포함하기 위해 그 주변을 다 체크할 수 있도록 두 개의 배열을 만들었다.
그런데 폭탄이 구석에 있는 경우 배열의 범위를 벗어나는데 그 부분은 체크하지 않도록 범위를 0이상 배열의 사이즈 미만으로 설정하였다.

0개의 댓글