๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1992
๋ฌธ์ ์์ฝ
- N×N ํฌ๊ธฐ์ ์์(0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ํ๋ ฌ)์ด ์ฃผ์ด์ง.
- ๊ฐ์ ์ซ์๋ก๋ง ์ด๋ฃจ์ด์ง ์์ญ์ ํ๋๋ก ์์ถํ์ฌ ์ถ๋ ฅ.
- ๊ทธ๋ ์ง ์๋ค๋ฉด ์์ญ์ 4๋ฑ๋ถํ์ฌ ์์ถ์ ์ฌ๊ท์ ์ผ๋ก ์งํ.
- ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์ฟผ๋ํธ๋ฆฌ(QuadTree) ํ์์ผ๋ก ์ถ๋ ฅ.
๐ ํ์ด ๋ฐ ์๊ณ ๋ฆฌ์ฆ
- ๋ถํ ์ ๋ณต (Divide & Conquer)
- ํ์ฌ ์์ญ(N×N)์ด ๋ชจ๋ ๊ฐ์ ์ซ์๋ก ์ด๋ฃจ์ด์ก๋์ง ๊ฒ์ฌ.
- ๋ค๋ฅด๋ฉด 4๋ฑ๋ถํ์ฌ ์ฌ๊ท์ ์ผ๋ก ์์ถ ์งํ.
- ์ถ๋ ฅ ํ์
- ์์ถ๋ ์์ญ์ด๋ฉด ์ซ์(0 ๋๋ 1) ๊ทธ๋๋ก ์ถ๋ ฅ.
- ๋ถํ ๋ ๊ฒฝ์ฐ (์ผ์ชฝ ์, ์ค๋ฅธ์ชฝ ์, ์ผ์ชฝ ์๋, ์ค๋ฅธ์ชฝ ์๋) ํํ๋ก ์ถ๋ ฅ.
- ์๊ฐ ์ต์ ํ
- ๊ฐ์ ์ซ์๋ก ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ ์ฆ์ ๋ฐํํ์ฌ ๋ถํ์ํ ํ์ ์ต์ํ.
- StringBuilder๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ ์ต์ ํ.
๐ก ์ฝ๋
public class Baekjoon_1992 {
static int n;
static int[][] board;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
board = new int[n][n];
for (int i = 0; i < n; i++) {
String s = sc.next();
for (int j = 0; j < n; j++) {
board[i][j] = s.charAt(j) - '0';
}
}
// ๋งจ ์ฒ์ ์ฒดํฌ
if (isPossible(n, 0, 0)) {
System.out.println(board[0][0]);
return;
}
compress(n, 0, 0);
System.out.println(sb);
}
static void compress(int n, int x, int y) {
if (isPossible(n, x, y)) {
sb.append(board[x][y]);
return;
}
int mid = n / 2;
sb.append("(");
// ์ผ์ชฝ ์
compress(mid, x, y);
// ์ค๋ฅธ์ชฝ ์
compress(mid, x, y + mid);
// ์ผ์ชฝ ์๋
compress(mid, x + mid, y);
// ์ค๋ฅธ์ชฝ ์๋
compress(mid, x + mid, y + mid);
sb.append(")");
}
// ๋ถํ ํ๋์ง ํ์ธ
static boolean isPossible(int n, int x, int y) {
int num = board[x][y];
for (int i = x; i < x + n; i++) {
for (int j = y; j < y + n; j++) {
// ์์ด ๋ค๋ฅด๋ฉด ๋ถํ ํด์ผํจ
if (num != board[i][j]) {
return false;
}
}
}
return true;
}
}
๐ ์๊ฐ ๋ณต์ก๋ ๋ถ์
- ์ต์
์ ๊ฒฝ์ฐ ์์ ๋ถํ (O(N log N))
- N×N ํฌ๊ธฐ์ ํ๋ ฌ์ ๊ณ์ 4๋ฑ๋ถํ๋ฏ๋ก, ๊น์ด๋ log N.
- ๊ฐ ๊น์ด์์ O(N^2) ์ฐ์ฐ ์ํ → ์ต์ ์ ๊ฒฝ์ฐ O(N^2 log N).
'์๊ณ ๋ฆฌ์ฆ(JAVA)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 17503 "๋งฅ์ฃผ ์ถ์ " (JAVA) (1) | 2025.02.14 |
---|---|
๋ฐฑ์ค 1780 "์ข ์ด์ ๊ฐ์" (JAVA) (0) | 2025.02.08 |
๋ฐฑ์ค 15686 "์นํจ ๋ฐฐ๋ฌ" (JAVA) (0) | 2025.02.07 |
๋ฐฑ์ค 1074 "Z" (JAVA) (0) | 2025.02.07 |
๋ฐฑ์ค ์ค๋ชฉ (JAVA) (0) | 2025.02.06 |