1 ๋ถ„ ์†Œ์š”

๐Ÿ“ [S1_1992] ์ฟผ๋“œํŠธ๋ฆฌ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Main {
	static int[][] map;
	static StringBuilder sb = new StringBuilder();

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		// ์ž…๋ ฅ start
		int N = Integer.parseInt(br.readLine());

		map = new int[N][N];

		for (int i = 0; i < N; i++) {
			String str = br.readLine();
			for (int j = 0; j < N; j++) {
				map[i][j] = str.charAt(j) -'0';
			}
		}
		// ์ž…๋ ฅ end

		// ํ•จ์ˆ˜ Start
		QuadTree(0, 0, N);
		// ํ•จ์ˆ˜ End


		// ์ถœ๋ ฅ
		System.out.println(sb);

	}

	// ์žฌ๊ท€ ํ•จ์ˆ˜
	static void QuadTree(int x, int y, int size) {
		// ๋งŒ์•ฝ ์••์ถ•์ด ๊ฐ€๋Šฅํ•˜๋ฉด ํ•˜๋‚˜์˜ ์ƒ‰์ƒ์œผ๋กœ ์••์ถ•
		if(check(x,y,size)) {
			sb.append(map[y][x]);
			return;
		}

		// ์••์ถ•์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋ฉด ์‚ฌ์ด์ฆˆ๋ฅผ 1/2 ํ•œ๋‹ค
		int newSize = size / 2;

		// ์—ฌ๋Š” ๊ด„ํ˜ธ
		sb.append("(");

		// ์™ผ์ชฝ ์œ„
		QuadTree(x, y, newSize);
		// ์˜ค๋ฅธ์ชฝ ์œ„
		QuadTree(x+newSize,y,newSize);
		// ์™ผ์ชฝ ์•„๋ž˜
		QuadTree(x, y+newSize, newSize);
		// ์˜ค๋ฅธ์ชฝ ์•„๋ž˜
		QuadTree(x+newSize, y+newSize, newSize);

		// ๋‹ซ๋Š” ๊ด„ํ˜ธ
		sb.append(")");
	}

	// ์••์ถ•์ด ๊ฐ€๋Šฅํ•œ์ง€ ์ฒดํฌ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
	static boolean check(int x, int y, int size) {
		// ์ œ์ผ ์ดˆ๊ธฐ๊ฐ’ ์ž…๋ ฅ
		int temp = map[y][x];

		for(int i=y; i<y+size; i++) {
			for(int j=x; j<x+size; j++) {
				// ๋งŒ์•ฝ ๋‹ค๋ฅธ ์ƒ‰์ด ์žˆ์œผ๋ฉด false
				if(temp != map[i][j]) return false;
			}
		}
		// ๋ชจ๋‘ ๋‹ค ๊ฐ™์€ ์ƒ‰์ด๋ฉด true
		return true;
	}
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

์žฌ๊ท€ ๋ฌธ์ œ !!
์ƒ‰์ข…์ด ๋ฌธ์ œ์™€ ๊ฐ™์€ ๋ฌธ์ œ์ด๋‹ค. ๊ทธ๋ƒฅ ๊ฐ™๋‹ค !
์žฌ๊ท€๋ฅผ ํ†ตํ•ด 4๋ถ„ํ• ํ•ด์„œ ํ™•์ธํ•ด ๊ฐ€๋ฉด์„œ ๋งŒ์•ฝ ์••์ถ•์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ถœ๋ ฅ์„ ํ•ด์ค€๋‹ค.
StringBuilder๋ฅผ ์‚ฌ์šฉํ•  ์ค„ ์•Œ์•„์•ผ ์ˆ ์ˆ  ํ’€๋ฆด ๊ฒƒ์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์‚ฌ์ด์ฆˆ๋ฅผ 1/2 ํ•ด์ฃผ๋Š” ๊ฒƒ๋„ ์žŠ์œผ๋ฉด ์•ˆ๋œ๋‹ค.

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: