알고리즘/프로그래머스

쿼드압축 후 개수 세기

베리영young 2024. 12. 9. 06:02

사용 알고리즘: 재귀

사용 언어: java

 

import java.util.*;

class Solution {
    int[] answer = new int[2];
    
    public int[] solution(int[][] arr) {
        int len = arr.length;
        divideArr(arr, len);
        
        return answer;
    }
    
    public void divideArr(int[][] arr, int len) {
        int n = len;
        if(len == 1) {
            answer[arr[0][0]]++;
            return;
        }
        
        int sum = 0;
        for(int i=0; i<len; i++) {
            for(int j=0; j<len; j++) {
                sum += arr[i][j];
            }
        }
        
        if(sum==0) {
            answer[0]++;
            return;
        }
        if(sum == len*len) {
            answer[1]++;
            return;
        }
        
        //압축 불가ㅠ
        int[][] nextArr = new int[len/2][len/2];
        ㅁ
        //1
        for(int i=0; i<len/2; i++) {
            for(int j=0; j<len/2; j++) {
                nextArr[i][j] = arr[i][j];
            }
        }
        divideArr(nextArr, len/2);
        
        //2
        for(int i=0; i<len/2; i++) {
            for(int j=len/2; j<n; j++) {
                nextArr[i][j-len/2] = arr[i][j];
            }
        }
        divideArr(nextArr, len/2);
        
        //3
        for(int i=len/2; i<n; i++) {
            for(int j=0; j<len/2; j++) {
                nextArr[i-len/2][j] = arr[i][j];
            }
        }
        divideArr(nextArr, len/2);
        
        //4
        for(int i=len/2; i<n; i++) {
            for(int j=len/2; j<n; j++) {
                nextArr[i-len/2][j-len/2] = arr[i][j];
            }
        }
        divideArr(nextArr, len/2);
    }
}

 

캬 시간초과가 안 나다ㅣㄴ