본문 바로가기
자료구조 & 알고리즘/문제 풀이 (프로그래머스)

쿼드압축 후 개수 세기 (백트래킹)

by 정구정구 2026. 6. 26.

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

문제 풀이

 주어진 배열을 재귀 함수를 이용한 백트래킹으로 계속 사분면으로 나누면서 사분면 내 모든 숫자가 같은지 판단하면 된다. 사실 아직 문제의 해결법으로 백트래킹이 잘 떠오르지 않아서 힌트를 좀 보고 나서야 해결법을 생각할 수 있었다.

 

 

작성한 코드 (정답 코드)

class Solution {
    
    public int[] solution(int[][] arr) {
        int[] answer = {0,0};
        
        backTracking(arr, 0, 0, arr.length, answer);
        
        return answer;
    }
    
    public void backTracking(int[][] arr, int startX, int startY, int size, int[] answer) {

        int firstValue = arr[startX][startY];

        if (isSame(arr, startX, startY, size)) {
            answer[firstValue]++;
            return;
        }

        if (size < 2) return;

        // 1사분면
        backTracking(arr, startX + (size/2), startY, size/2, answer);

        // 2사분면
        backTracking(arr, startX, startY, size/2, answer);

        // 3사분면
        backTracking(arr, startX, startY + (size/2), size/2, answer);

        // 4사분면
        backTracking(arr, startX+ (size/2), startY+ (size/2), size/2, answer);

    }
    
    public boolean isSame(int[][] arr, int startX, int startY, int size) {

        int firstValue = arr[startX][startY];

        for (int i = startX; i < startX + size; i++) {
            for (int j = startY; j < startY + size; j++) {

                if (arr[i][j] != firstValue) return false;

            }
        }

        return true;
    }        
}

'자료구조 & 알고리즘 > 문제 풀이 (프로그래머스)' 카테고리의 다른 글

큰 수 만들기  (0) 2026.06.30
택배상자 (큐, 스택)  (0) 2026.06.29
모음 사전 (DFS)  (0) 2026.06.25
소수 찾기 (DFS)  (0) 2026.06.24
삼각 달팽이 (델타 배열)  (0) 2026.06.23