๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ถ„ํ• ์ •๋ณต

[๋ฐฑ์ค€] 1992๋ฒˆ ์ฟผ๋“œํŠธ๋ฆฌ(java)

์ ์ด 2021. 8. 18. 13:52
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ Silver 1

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

 

1992๋ฒˆ: ์ฟผ๋“œํŠธ๋ฆฌ

์ฒซ์งธ ์ค„์—๋Š” ์˜์ƒ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž N ์ด ์ฃผ์–ด์ง„๋‹ค. N ์€ ์–ธ์ œ๋‚˜ 2์˜ ์ œ๊ณฑ์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉฐ, 1 ≤ N ≤ 64์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ๋Š” ๊ธธ์ด N์˜ ๋ฌธ์ž์—ด์ด N๊ฐœ ๋“ค์–ด์˜จ๋‹ค. ๊ฐ ๋ฌธ์ž์—ด์€ 0 ๋˜

www.acmicpc.net


ํ’€์ด

์••์ถ•์ด ๋˜์ง€ ์•Š์œผ๋ฉด 4๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋ถ„ํ• ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

ํ•จ์ˆ˜ ๋‚ด์—์„œ ๊ตฌ์—ญ์„ ๋‚˜๋ˆŒ ํ•„์š” ์—†์ด ์••์ถ•์ด ๋˜๋Š”์ง€๋ถ€ํ„ฐ ํ™•์ธ(canZip)

์••์ถ•์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด (=๋ฒ”์œ„๋‚ด์— ๋ชจ๋“  ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด) ํ•ด๋‹น ์ˆ˜๋ฅผ StringBuilder๋ณ€์ˆ˜์— ์ €์žฅ

์••์ถ•์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด, size์™€ ํ˜„์žฌ ์‹œ์ž‘์œ„์น˜(ci, cj)๋ฅผ ๊ธฐ์ค€์œผ๋กœ 4๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋ˆˆ ํ›„ ์žฌ๊ท€ ํ˜ธ์ถœ

 

์ฝ”๋“œ

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

public class Main{
	static StringBuilder sb;		//๊ฒฐ๊ณผ๊ฐ’ ์ €์žฅ ๋ณ€์ˆ˜
	static int[][] arr;				
	public static void main(String[] args) throws Exception{
		BufferedReader br  = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		arr = new int[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)-'0';			//๋ฌธ์žํ˜•->์ •์ˆ˜ํ˜• ๋ณ€ํ™˜
			}
		}
		sb = new StringBuilder();
		quardTree(N, 0, 0);
		System.out.println(sb.toString());
	}
	static boolean canZip(int size, int ci, int cj) {
		int tmp = arr[ci][cj];
		for(int i =0 ; i < size; i++) {
			for(int j =0 ; j<size ; j++) {
				if(tmp != arr[ci+i][cj+j])
					return false;
			}
		}
		return true;
	}
	static void quardTree(int size, int ci, int cj) {
		if(canZip(size, ci, cj)) {		//์••์ถ•ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ => ๋ฒ”์œ„๋‚ด ๋ชจ๋“  ์ˆซ์ž๊ฐ€ ๊ฐ™์€์ง€ ํŒ๋ณ„
			sb.append(arr[ci][cj]);		//๊ฐ™๋‹ค๋ฉด, sb์— ๋ฐ”๋กœ ์ €์žฅ
			return;
		}
		sb.append('(');					//๋ถ„ํ•  ์‹œ, ( ์‚ฝ์ž… ํ›„ ์—ฐ์‚ฐ
		quardTree(size/2, ci, cj);		//์™ผ์ชฝ ์œ„
		quardTree(size/2, ci, cj+size/2);	//์˜ค๋ฅธ์ชฝ ์œ„
		quardTree(size/2, ci+size/2, cj);	//์™ผ์ชฝ ์•„๋ž˜
		quardTree(size/2, ci+size/2, cj+size/2);	//์˜ค๋ฅธ์ชฝ ์•„๋ž˜
		sb.append(')');		
	}
}
๋ฐ˜์‘ํ˜•