본문 바로가기
🧑‍💻코딩 테스트/백준 (BOJ)

[코딩테스트/백준 알고리즘] 1992번 - 쿼드트리 (Java, 자바 풀이)

by 코코의 주인 2023. 1. 6.

문제

https://www.acmicpc.net/problem/1992

 

1992번: 쿼드트리

첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또

www.acmicpc.net


문제 설명


문제 풀이

https://www.acmicpc.net/problem/1780

 

1780번: 종이의 개수

N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수

www.acmicpc.net

이 문제랑 풀이 방식이 비슷했다.

재귀 호출을 통해 해결할 수 있는 문제다.


코드

import java.io.*;
import java.util.*;

class Main {
    static String[] map;
    static StringBuilder result = new StringBuilder();


    //압축
    static void zip(int row, int col, int size){
    
    	//사이즈가 1일때
        if(size == 1) {
            if(map[row].charAt(col) == '1')
                result.append(1);
            else
                result.append(0);
        }
        else {
            boolean flag = true;
            char ch = map[row].charAt(col);
            for(int i = row; i < row + size; i++) {
                for(int j = col; j < col + size; j++){
                    if(ch != map[i].charAt(j)) {
                        flag = false;
                        break;
                    }
                }
            }
	    //압축이 가능하면
            if(flag) {
                result.append(ch);
            }
            else {
                result.append("(");
                zip(row, col, size / 2);
                zip(row, col + size / 2, size / 2);
                zip(row + size / 2, col, size / 2);
                zip(row + size / 2, col + size / 2, size / 2);
                result.append(")");
            }
        }
    }

    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        map = new String[N];

	//입력
        for(int i = 0; i < N ;i++) {
            map[i] = br.readLine();
        }

        zip(0, 0, N);
	//출력
        System.out.println(result);
    }
}

댓글