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

이서현·2021년 7월 29일
0

Algorithm

목록 보기
57/76

07.29에 푼 문제입니다🌷
쿼드압축 후 개수 세기

풀이법

이 문제는 DFS로 풀었다.
배열이 주어지면 4분할을 한다.
Q1    Q2
Q3    Q4

쪼개진 4개의 배열에 0으로만 된 것과 1로 된 것은
0, 1 개수를 더해주고 끝난다.
0과 1이 섞인 배열은 다시 dfs로 4분할을 한다.

이 과정을 반복하고 배열에 1개만 남았을 때
0,1 개수를 세고 끝난다.

전체 코드

function solution(arr) {
    if(zeroORone(arr)===1) return [0,1]
    else if(zeroORone(arr)===0) return[1,0]
    checkQ(arr)
    return answer;
}


var answer = [0,0];

// 배열 쪼개기
function checkQ(arr){
    let half = arr.length/2
    if(arr.length<=1) {
        let num =arr[0][0]
        if(num===0) answer[0]++
        if(num===1) answer[1]++

        return answer
    }


    const Q1 =[], Q2=[], Q3=[], Q4=[]

    for(let i=0;i<arr.length;i++){
        if(i<half){
            //1
            let tmp1 = []
            for(let j=0;j<half;j++) {
                tmp1.push(arr[i][j])
            }
            Q1.push(tmp1)
            //2
            let tmp2 = []
            for(let j=half;j<arr.length;j++) {
                tmp2.push(arr[i][j])
            }
            Q2.push(tmp2)
        }
        else{
            //3
            let tmp3 = []
            for(let j=0;j<half;j++) {
                tmp3.push(arr[i][j])
            }
            Q3.push(tmp3)
            //2
            let tmp4 = []
            for(let j=half;j<arr.length;j++) {
                tmp4.push(arr[i][j])
            }
            Q4.push(tmp4)
        }
    }
    if(zeroORone(Q1)===0) answer[0]++
    else if(zeroORone(Q1)===1) answer[1]++
    else checkQ(Q1)

    if(zeroORone(Q2)===0) answer[0]++
    else if(zeroORone(Q2)===1) answer[1]++
    else checkQ(Q2)

    if(zeroORone(Q3)===0) answer[0]++
    else if(zeroORone(Q3)===1) answer[1]++
    else checkQ(Q3)

    if(zeroORone(Q4)===0) answer[0]++
    else if(zeroORone(Q4)===1) answer[1]++
    else checkQ(Q4)

}

// 0, 1 개수 체크
function zeroORone(arr){
    arr = arr.flat()
    if(arr.filter(q=>q===0).length===arr.length){
        return 0
    }
    else if(arr.filter(q=>q===1).length===arr.length){
        return 1
    }

    return 2
}
profile
안녕하세요. 이서현입니다( ღ'ᴗ'ღ )

0개의 댓글