π [λ°±μ€μκ³ λ¦¬μ¦ νμ΄] Q.2630 μμ’ μ΄ λ§λ€κΈ° λ¬Έμ νμ΄ - java
π λ¬Έμ
https://www.acmicpc.net/problem/2630
μλ <κ·Έλ¦Ό 1>κ³Ό κ°μ΄ μ¬λ¬κ°μ μ μ¬κ°νμΉΈλ€λ‘ μ΄λ£¨μ΄μ§ μ μ¬κ°ν λͺ¨μμ μ’ μ΄κ° μ£Όμ΄μ Έ μκ³ , κ° μ μ¬κ°νλ€μ νμμμΌλ‘ μΉ ν΄μ Έ μκ±°λ
νλμμΌλ‘ μΉ ν΄μ Έ μλ€. μ£Όμ΄μ§ μ’ μ΄λ₯Ό μΌμ ν κ·μΉμ λ°λΌ μλΌμ λ€μν ν¬κΈ°λ₯Ό κ°μ§ μ μ¬κ°ν λͺ¨μμ νμμ λλ νλμ μμ’ μ΄λ₯Ό λ§λ€λ €κ³ νλ€.
μ 체 μ’ μ΄μ ν¬κΈ°κ° NΓN(N=2k, kλ 1 μ΄μ 7 μ΄νμ μμ°μ) μ΄λΌλ©΄ μ’ μ΄λ₯Ό μλ₯΄λ κ·μΉμ λ€μκ³Ό κ°λ€.
μ 체 μ’ μ΄κ° λͺ¨λ κ°μ μμΌλ‘ μΉ ν΄μ Έ μμ§ μμΌλ©΄ κ°λ‘μ μΈλ‘λ‘ μ€κ° λΆλΆμ μλΌμ <κ·Έλ¦Ό 2>μ I, II, III, IVμ κ°μ΄ λκ°μ ν¬κΈ°μ λ€ κ°μ N/2 Γ N/2μμ’ μ΄λ‘ λλλ€.
λλμ΄μ§ μ’ μ΄ I, II, III, IV κ°κ°μ λν΄μλ μμμμ λ§μ°¬κ°μ§λ‘ λͺ¨λ κ°μ μμΌλ‘ μΉ ν΄μ Έ μμ§ μμΌλ©΄ κ°μ λ°©λ²μΌλ‘ λκ°μ ν¬κΈ°μ λ€ κ°μ μμ’ μ΄λ‘ λλλ€.
μ΄μ κ°μ κ³Όμ μ μλΌμ§ μ’ μ΄κ° λͺ¨λ νμμ λλ λͺ¨λ νλμμΌλ‘ μΉ ν΄μ Έ μκ±°λ, νλμ μ μ¬κ°ν μΉΈμ΄ λμ΄ λ μ΄μ μλ₯Ό μ μμ λκΉμ§ λ°λ³΅νλ€.
μμ κ°μ κ·μΉμ λ°λΌ μλμ λ <κ·Έλ¦Ό 3>μ <κ·Έλ¦Ό 1>μ μ’ μ΄λ₯Ό μ²μ λλ νμ μνλ₯Ό, <κ·Έλ¦Ό 4>λ λ λ²μ§Έ λλ νμ μνλ₯Ό,
<κ·Έλ¦Ό 5>λ μ΅μ’ μ μΌλ‘ λ§λ€μ΄μ§ λ€μν ν¬κΈ°μ 9μ₯μ νμμ μμ’ μ΄μ 7μ₯μ νλμ μμ’ μ΄λ₯Ό 보μ¬μ£Όκ³ μλ€.
μ λ ₯μΌλ‘ μ£Όμ΄μ§ μ’ μ΄μ ν λ³μ κΈΈμ΄ Nκ³Ό κ° μ μ¬κ°νμΉΈμ μ(νμμ λλ νλμ)μ΄ μ£Όμ΄μ§ λ μλΌμ§ νμμ μμ’ μ΄μ νλμ μμ’ μ΄μ κ°μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
π μ κ·Όλ²
Q.2630 μμ’ μ΄ λ§λ€κΈ° λ¬Έμ μ λλ€.
μ£Όμ΄μ§ μ’ μ΄λ₯Ό μΌμ ν κ·μΉμ λ°λΌ μλΌμ λ€μν ν¬κΈ°λ₯Ό κ°μ§ μ μ¬κ°ν λͺ¨μμ νμμ λλ νλμ μ’ μ΄λ₯Ό λ§λ€κ³ κ°κ° λͺκ°μΈμ§λ₯Ό
ꡬνλ λ¬Έμ μ λλ€.
κ·μΉλ€μ λ€μκ³Ό κ°μ΅λλ€. λ§μ½ μ 체 μ’ μ΄κ° λͺ¨λ κ°μ μμΌλ‘ μΉ ν΄μ Έ μμ§ μλλ€λ©΄ κ°λ‘μ μΈλ‘λ‘ μ€κ° λΆλΆμ μλΌ
λκ°μ μ μ¬κ°ν ν¬κΈ°λ‘ 4λ±λΆμ μλ¦ λλ€. μ μ¬κ°νμ μμ’ μ΄κ° λͺ¨λ κ°μ μμ΄ λ λ κΉμ§ 4λ±λΆμΌλ‘ λλλλ€.
κ·μΉμ λ§λμ§ νμΈμ νκ³ λ§μ§ μλλ€λ©΄ 4λ±λΆμΌλ‘ λλ μ§κΈ°λ₯Ό λ°λ³΅ν©λλ€.
κ·μΉμ λ§μ λκΉμ§ λΆν νκ³ κ·μΉμ λ§μ λ μ 볡ν©λλ€.
λΆν μ 볡λ²μΌλ‘ νμ΄κ° κ°λ₯ν©λλ€.
λ¬Έμ μμ μ£Όμ΄μ§ κ·μΉλλ‘
μ£Όμ΄μ§λ μ’ μ΄κ° λͺ¨λ κ°μ μμΈμ§ νμΈν©λλ€.
μ£Όμ΄μ§ μ’ μ΄κ° κ°μ μμ΄ μλλΌλ©΄
4λ±λΆμΌλ‘ λλ μΌ νλλ° μΌμ νκ² κ°λ‘ μΈλ‘λ₯Ό λ°μΌλ‘ μ μ΄ λλλλ€.
μ¬κ·λ₯Ό ν΅ν΄ 4λ±λΆμΌλ‘ λλλ κ²μ λ°λ³΅νλ€ μ£Όμ΄μ§ μ’ μ΄κ° λͺ¨λ κ°μμμ΄ λ λ
ν΄λΉ μμμ κ°μλ₯Ό λλ €μ£Όλ©΄ λ©λλ€.
μ΅μ’ μ μΌλ‘ νμμ μμ’ μ΄μ νλμ μμ’ μ΄μ κ°μ ꡬν μ μκ²λ©λλ€.
π» μ½λ
package problem.divide_conquer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main_2630 {
static int n;
static int paper[][];
static int blue = 0;
static int white = 0;
public static void main(String[] args) throws IOException {
input();
solve(0, 0, n);
System.out.println(white);
System.out.println(blue);
}
public static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
paper = new int[n][n];
for (int i = 0; i < n; i++) {
String[] input = br.readLine().split(" ");
for (int j = 0; j < n; j++) {
paper[i][j] = Integer.parseInt(input[j]);
}
}
br.close();
}
public static void solve(int startX, int startY, int len) {
if (check(startX, startY, len)) {
if (paper[startY][startX] == 1) {
blue++;
} else {
white++;
}
} else {
int length = len / 2;
solve(startX, startY, length);
solve(startX + length, startY, length);
solve(startX, startY + length, length);
solve(startX + length, startY + length, length);
}
}
public static boolean check(int startX, int startY, int len) {
int color = paper[startY][startX];
for (int i = startY; i < startY + len; i++) {
for (int j = startX; j < startX + len; j++) {
if (color != paper[i][j]) {
return false;
}
}
}
return true;
}
}