[Programmers / Level 2] 68936. 쿼드압축 후 개수 세기 (Java)

이하얀·2025년 3월 3일
0

🕊️ 프로그래머스

목록 보기
106/124

💡 Info




입출력 조건




입출력 예시




문제 이해


  • 2차원 배열을 압축하여 0과 1의 개수를 세는 문제(쿼드트리 분할 정복 사용)


알고리즘


풀이 시간 : 27분

  • 현재 영역이 모두 같은 숫자인지 확인
    • 만약 0 또는 1로만 이루어져 있다면 해당 숫자의 개수를 증가
  • 같지 않다면 4개로 나눠서 확인
class Solution {
    public int[] solution(int[][] arr) {
        int[] answer = new int[2];
        compress(arr, 0, 0, arr.length, answer);
        return answer;
    }

    private void compress(int[][] arr, int x, int y, int size, int[] answer) {
        if (isUniform(arr, x, y, size)) {
            answer[arr[x][y]]++;
            return;
        }

        int half = size / 2;
        int[][] offsets = {{0, 0}, {0, half}, {half, 0}, {half, half}};
        
        for (int[] offset : offsets) {
            compress(arr, x + offset[0], y + offset[1], half, answer);
        }
    }

    public boolean isUniform(int[][] arr, int x, int y, int size) {
        int val = arr[x][y];
        for (int i = x; i < x + size; i++) {
            for (int j = y; j < y + size; j++) {
                if (arr[i][j] != val) return false;
            }
        }
        return true;
    }
}


결과

profile
언젠가 내 코드로 세상에 기여할 수 있도록, Data Science&BE 개발 기록 노트☘️

0개의 댓글