프로그래머스 | 쿼드압축 후 개수 세기

재귀함수를 사용하는데 익숙해져야해!!

let answer = [0,0];//재귀함수를 돌면서 0과 1의 갯수를 계속 더해야 하기 때문에 solution함수 밖에 놓는다
function solution(arr) {
    if(arr.length===1){
        if(arr[0]===0)answer[0]+=1;
        else answer[1]+=1;
    }
    else if(arr.length===2){
        let result=check(arr);
        if(result===0)answer[0]+=1;
        else if(result===1) answer[1]+=1;
        else{
            solution([arr[0][0]]);
            solution([arr[0][1]]);
            solution([arr[1][0]]);
            solution([arr[1][1]]);
        }
    }
    else{
        let result=check(arr);
        if(result===0)answer[0]+=1;
        else if(result===1) answer[1]+=1;
        else{
            let a=[];
            let b=[];
            let c=[];
            let d=[];
            for(let i=0;i<arr.length/2;i++){
                a.push(arr[i].slice(0,arr[i].length/2));
                b.push(arr[i].slice(arr[i].length/2,arr[i].length));
            }
            for(let i=arr.length/2;i<arr.length;i++){
                c.push(arr[i].slice(0,arr[i].length/2));
                d.push(arr[i].slice(arr[i].length/2,arr[i].length));
            }
            solution(a);
            solution(b);
            solution(c);
            solution(d);
        }
        
    }
    
    
    return answer;
}
function check(arr){
        for(let i=0;i<arr.length;i++){
            for(let j=0;j<arr[i].length;j++){
                if(arr[i][j]!==arr[0][0]){
                    return false;
                }
            }
        }
        return arr[0][0];
    }

좋은 웹페이지 즐겨찾기