ALGORITHM/PROGRAMMERS

[프로그래머스] 쿼드압축 후 개수 세기 (월간 코드 챌린지 시즌1)

0298 2021. 8. 7. 21:28

https://programmers.co.kr/learn/courses/30/lessons/68936

 

코딩테스트 연습 - 쿼드압축 후 개수 세기

[[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15]

programmers.co.kr

2021-08-07


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Solution {
   static int zero, one;
    static void solve(int size, int x, int y, int[][] arr) {
        if(size == 1) {
            if(arr[x][y] == 0)zero++;
            else one++;
            return;
        }
 
        if(check(size, x,  y, arr)) {
            return;
        }
        solve(size/2, x, y, arr);
        solve(size/2, x, y+size/2, arr);
        solve(size/2, x+size/2, y, arr);
        solve(size/2, x+size/2, y+size/2, arr);
    }
 
    static boolean check(int size, int x, int y, int[][] arr) {
        int num = arr[x][y];
        for(int i = x; i < x+size; i++) {
            for(int j = y; j < y+size; j++) {
                if(arr[i][j] != num) return false;
            }
        }
 
        if(num == 0) zero++;
        else one++;
        return true;
    }
    static int[] solution(int[][] arr) {
        zero = 0;
        one = 0;
        solve(arr.length00, arr);
 
        return new int[]{zero, one};
    }
}
cs

#문제풀이

분할정복으로 풀었다.