[프로그래머스 JAVA] 68936. 쿼드압축 후 개수 세기

2026. 4. 23. 22:49·코딩테스트/프로그래머스

문제 링크


 

프로그래머스

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

programmers.co.kr

접근 방법


주어진 2차원 배열을 하나의 정사각형 영역으로 보고, 현재 영역이 모두 같은 값으로 이루어져 있는지 확인합니다.
만약 현재 영역 안에 다른 값이 섞여 있다면 영역을 4개의 정사각형으로 나누고, 각 영역에 대해 같은 과정을 재귀적으로 반복합니다.

소스 코드


class Solution {
    int[] cnt = {0, 0};
    int[][] board;

    void recursive(int y, int x, int size) {
        if (size == 1) {
            cnt[board[y][x]]++;
            return;
        }

        int value = board[y][x];
        boolean isSame = true;

        for (int i = y; i < y + size; i++) {
            for (int j = x; j < x + size; j++) {
                if (value != board[i][j]) {
                    isSame = false;
                    break;
                }
            }

            if (!isSame) {
                break;
            }
        }

        if (isSame) {
            cnt[value]++;
            return;
        }

        int half = size / 2;

        recursive(y, x, half);
        recursive(y + half, x, half);
        recursive(y, x + half, half);
        recursive(y + half, x + half, half);
    }

    public int[] solution(int[][] arr) {
        board = arr;
        recursive(0, 0, arr.length);
        return cnt;
    }
}

코드 설명


cnt 배열은 압축 후 남는 0과 1의 개수를 저장합니다.
cnt[0]에는 0의 개수가 저장되고, cnt[1]에는 1의 개수가 저장됩니다.

board에는 입력으로 받은 2차원 배열을 저장합니다.

recursive() 함수는 현재 확인할 정사각형 영역의 시작 좌표와 크기를 매개변수로 받습니다.
y와 x는 현재 영역의 왼쪽 위 좌표이고, size는 현재 영역의 한 변의 길이입니다.

size가 1이면 더 이상 나눌 수 없는 한 칸짜리 영역입니다.
따라서 해당 위치의 값이 0이면 cnt[0]을 증가시키고, 1이면 cnt[1]을 증가시킨 뒤 종료합니다.

 

현재 영역에 0과 1이 섞여 있다면 영역을 4등분해야 합니다.
half에 현재 크기의 절반을 저장한 뒤, 왼쪽 위, 왼쪽 아래, 오른쪽 위, 오른쪽 아래 영역을 차례대로 재귀 호출합니다.

solution() 함수에서는 입력 배열을 board에 저장하고, 전체 배열을 하나의 영역으로 보아 recursive(0, 0, arr.length)를 호출합니다.

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스 JAVA] 258707. n + 1 카드게임  (0) 2026.05.02
[프로그래머스 JAVA] 17686. [3차] 파일명 정렬  (0) 2026.04.27
[프로그래머스 SQL] 301649. 대장균 크기에 따라 분류하기 2  (0) 2026.04.09
[프로그래머스 SQL] 131114. 경기도에 위치한 식품창고 목록 출력하기  (0) 2026.04.07
[프로그래머스 JAVA] 42839. 소수 찾기  (0) 2024.07.16
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 JAVA] 258707. n + 1 카드게임
  • [프로그래머스 JAVA] 17686. [3차] 파일명 정렬
  • [프로그래머스 SQL] 301649. 대장균 크기에 따라 분류하기 2
  • [프로그래머스 SQL] 131114. 경기도에 위치한 식품창고 목록 출력하기
tkxx_ls
tkxx_ls
  • tkxx_ls
    tkxx_ls Story
    tkxx_ls
  • 전체
    오늘
    어제
    • 분류 전체보기 (117) N
      • 코딩테스트 (56) N
        • 백준 (40)
        • 프로그래머스 (16) N
      • 42Seoul (6)
        • libft (6)
      • Github (1)
      • 환경설정 (1)
        • 기타 (4)
        • c & c++ (3)
      • 잡설 (2)
      • CS (7)
        • 네트워크 (2)
        • 강화 학습 (4)
        • 자료구조 (8)
        • 알고리즘 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dfs
    java build
    gradle
    Gradle 설정
    c++
    강화학습
    Baekjoon
    머신러닝
    신경망
    분할정복
    구현
    브루트포스
    java 버전 호환성
    BOJ
    백준
    gradle java 설정
    프로그래머스
    gradle tool chain
    자료구조
    build 재현성
    Java
    백트래킹
    문자열 처리
    알고리즘
    인공지능
    완전탐색
    jdk 버전 관리
    programmers
    java tool chain
    cs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
tkxx_ls
[프로그래머스 JAVA] 68936. 쿼드압축 후 개수 세기
상단으로

티스토리툴바