본문 바로가기

프로그래머스/구현

[재귀] 프로그래머스 '쿼드압축 후 개수' - js

반응형

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/68936

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2. 코드

const solution = (arr) => {
    let zero = 0;
    let one = 0;
	
  	// 쪼개는 함수 (시작행, 시작열, 비교할 길이)
    const divide = (row, col, n) => {
        let canDivide = true;
        // 처음부터 전부 숫자가 같은 지 비교
        for (let y=row; y < row+n; y++) {
            for (let x=col; x < col+n; x++) {
                if (arr[row][col] !== arr[y][x]) 
                    canDivide = false;
            }
        };
      	// 만약 같은 값으로 이루어 지지 않았으면, 4분할 하여 n/2씩 비교하는 재귀함수를 호출
        if (!canDivide) {
            const halfN = parseInt(n/2);
            divide(row, col, halfN)
            divide(row, col+halfN, halfN)
            divide(row+halfN, col, halfN)
            divide(row+halfN, col+halfN, halfN)
        // 만약 같은 값이면 행렬의 시작점을 비교하여 카운팅
        } else {
            if (arr[row][col]) one ++;
            else zero ++;
        }
    }
    divide(0, 0, arr.length);
    
    return [zero, one];    
}

요 몇일 새 재귀 문제 안풀었다고 재귀에 대한 감을 잃었나보다.. 어렵게 접근해서 어렵게 풀려고 했으나 꼬여서 실패 ㅋㅋㅋㅋ

재귀는 문제를 더 작은 문제로 쪼갤 수 있을 때!!!!

 

복기

6/18
반응형