๋ฐ์ํ
๋ฌธ์ Silver 1
https://www.acmicpc.net/problem/1992
ํ์ด
์์ถ์ด ๋์ง ์์ผ๋ฉด 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(')');
}
}
๋ฐ์ํ