BOJ_S1_1992
๐ [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 ํด์ฃผ๋ ๊ฒ๋ ์์ผ๋ฉด ์๋๋ค.