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.length, 0, 0, arr);
return new int[]{zero, one};
}
}
|
cs |
#문제풀이
분할정복으로 풀었다.
