본문 바로가기

알고리즘/BAEKJOON

1992 쿼드트리

1992번: 쿼드트리 (acmicpc.net)

 

1992번: 쿼드트리

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

www.acmicpc.net

 

package Recursive;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Baekjoon_1992_쿼드트리 {
	static int N;
	static char[][] arr;
	static StringBuilder sb;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		sb = new StringBuilder();
		N = Integer.parseInt(br.readLine());
		arr = new char[N][N];

		for(int i = 0; i < N; i++) {
			String str = br.readLine();
			for(int j = 0; j < N; j++) {
				arr[i][j] = str.charAt(j);
			}
		}
		
		divArr(0,0,N);
		System.out.println(sb.toString());
		
	}
	
	private static void divArr(int row, int col, int size) {
		
		if(checkColor(row, col, size)) {
			sb.append(arr[row][col]);
		}
		
		else {
			int newSize = size/2;
			sb.append("(");
			divArr(row, col, newSize);
			divArr(row, col+newSize, newSize);
			divArr(row+newSize, col, newSize);
			divArr(row+newSize, col+newSize, newSize);
			sb.append(")");
		}

	}

	private static boolean checkColor(int startRow, int startCol, int size) {
		char first = arr[startRow][startCol];
		
		for(int i = startRow; i < startRow + size; i++) {
			for(int j = startCol; j < startCol + size; j++) {
				if(arr[i][j] != first) 
					return false;
			}
		}
		return true;
	}

}

'알고리즘 > BAEKJOON' 카테고리의 다른 글

11399 ATM  (0) 2021.08.24
13305 주유소  (0) 2021.08.23
10094 별 찍기 - 19  (0) 2021.08.09
5568 카드 놓기  (0) 2021.08.07
2630 색종이 만들기  (0) 2021.08.04