Files
Coding-Practice/programmers/쿼드압축 후 개수 세기/solution.java
T
2023-01-21 17:11:33 +09:00

114 lines
3.2 KiB
Java

// [문제 링크]: https://school.programmers.co.kr/learn/courses/30/lessons/68936
import java.util.*;
class Solution {
public int[] solution(int[][] arr) {
return div(arr,0,0,arr.length,arr.length);
}
public int[] div(int[][] arr, int s, int sc, int e, int ec){
int z = 0, o = 0, tmp = 0, cnt = 0;
int[] ans = new int[2], tt = new int[2];
if(s == 0 && sc == 0 && e == arr.length && ec == arr.length){
for(int rr = 0; rr < e; rr++){
for(int cc = 0; cc < ec; cc++){
tmp += arr[rr][cc];
cnt ++;
}
}
if(cnt == 0) ;
else if(tmp == 0) {
ans[0] += 1;
return ans;
}
else if(tmp == cnt) {
ans[1] += 1;
return ans;
}
}
if(e>1){
tmp = 0;
cnt = 0;
for(int rr = s; rr < (s+e)/2; rr++){
for(int cc = sc; cc < (sc+ec)/2; cc++){
tmp += arr[rr][cc];
cnt ++;
}
}
if(cnt == 0) ;
else if(tmp == 0) {
ans[0] += 1;
}
else if(tmp == cnt) {
ans[1] += 1;
}
else{
tt = div(arr, s, sc, (s+e)/2, (sc+ec)/2);
ans[0] += tt[0];
ans[1] += tt[1];
}
tmp = 0;
cnt = 0;
for(int rr = s; rr < (s+e)/2; rr++){
for(int cc = (sc+ec)/2 ; cc < ec; cc++){
tmp += arr[rr][cc];
cnt ++;
}
}
if(cnt == 0) ;
else if(tmp == 0) {
ans[0] += 1;
}
else if(tmp == cnt) {
ans[1] += 1;
}
else{
tt = div(arr, s, (sc+ec)/2, (s+e)/2, ec);
ans[0] += tt[0];
ans[1] += tt[1];
}
tmp = 0;
cnt = 0;
for(int rr = (s+e)/2; rr < e; rr++){
for(int cc = sc; cc < (sc+ec)/2; cc++){
tmp += arr[rr][cc];
cnt ++;
}
}
if(cnt == 0) ;
else if(tmp == 0) {
ans[0] += 1;
}
else if(tmp == cnt) {
ans[1] += 1;
}
else{
tt = div(arr, (s+e)/2, sc, e, (sc+ec)/2);
ans[0] += tt[0];
ans[1] += tt[1];
}
tmp = 0;
cnt = 0;
for(int rr = (s+e)/2; rr < e; rr++){
for(int cc = (sc+ec)/2 ; cc < ec; cc++){
tmp += arr[rr][cc];
cnt ++;
}
}
if(cnt == 0) ;
else if(tmp == 0) {
ans[0] += 1;
}
else if(tmp == cnt) {
ans[1] += 1;
}
else{
tt = div(arr, (s+e)/2, (sc+ec)/2, e, ec);
ans[0] += tt[0];
ans[1] += tt[1];
}
}
return ans;
}
}