본문 바로가기
백준/분할정복

백준 1992. 쿼드트리

by 29살아저씨 2021. 9. 6.
반응형

🅰 백준 1992. 쿼드트리

 

1992번: 쿼드트리

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

www.acmicpc.net

✏️ 문제 풀이

  • 영상이 4개로 압축되어 진행되므로 4개의 시작점을 구해서 재귀를 돌려주었다.
  • 또한 출력을 맞춰주기 위해 재귀가 시작되기 전에 "("를 출력해주고, 재귀가 끝나면 ")"를 출력해주었다.

✏️ 소스코드

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

public class Main {
	static int N;
	static int tree[][];

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

		// 데이터 입력
		for (int i = 0; i < N; i++) {
			String str = br.readLine();
			for (int j = 0; j < N; j++) {
				tree[i][j] = str.charAt(j) - '0';
				if (tree[i][j] == 1)
					treecnt++;
			}
		}
		if (treecnt == N * N)
			System.out.println(1);
		else if (treecnt == 0)
			System.out.println(0);
		else {
			quardTree(0, 0, N);
		}
	}

	static void quardTree(int start_x, int start_y, int n) {
		int check = tree[start_x][start_y];
		boolean a = false;

		Loop1: for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (tree[start_x + i][start_y + j] != check) {
					a = true;
					break Loop1;
				}
			}
		}

		if (!a) {
			System.out.print(check);
		} else {
			System.out.print("(");
			quardTree(start_x, start_y, n/2);
			quardTree(start_x, start_y + n / 2, n / 2);
			quardTree(start_x + n / 2, start_y, n / 2);
			quardTree(start_x + n / 2, start_y + n / 2, n / 2);
			System.out.print(")");
		}
	}
}

 

✅ 후기

  •  
반응형

'백준 > 분할정복' 카테고리의 다른 글

백준 11729. 하노이탑  (0) 2021.09.06
백준 1780. 종이의 개수  (0) 2021.09.06
백준 2447. 별찍기 10  (0) 2021.09.06
백준 2448. 별찍기 11  (0) 2021.09.06
백준 11728. 배열합치기  (0) 2021.09.06

댓글