https://www.acmicpc.net/problem/1992
for문으로 모든 값을 돌며, 첫 인덱스의 값을 num으로 두고 전부 num과 같은지 검사를 한다.
이때 만약 다른 수가 나오면 분할을 해야하므로 (를 출력시키고 전체를 4분할로 나누고 다시 이 메서드를 돌린다.
자세히 보면 왼쪽 위는 전부 0이 되는 모습을 찾을 수 있다. 그럼 0을 출력시킨다.
이런식으로 반복하여 출력을 하면 된다.
import java.util.Scanner;
public class Num1992 {
public static int N;
public static int Num[][];
public static void main(String[] args) {
//input
Scanner scanner = new Scanner(System.in);
N = Integer.parseInt(scanner.nextLine());
Num = new int[N][N];
for (int i=0; i<N; i++) {
String[] a = scanner.nextLine().split("");
for (int j=0; j<N; j++) {
Num[i][j] = Integer.parseInt(a[j]);
}
}
//logic
//output
input(0, 0, N);
}
public static void input(int startHeight,int startWidth, int size) {
int num = Num[startHeight][startWidth];
for (int i=startHeight; i<startHeight+size; i++) {
for (int j=startWidth; j<startWidth+size; j++) {
if (Num[i][j] != num) {
if (size == 2) {
System.out.print("(");
for (int k = startHeight; k < startHeight + 2; k++) {
for (int t = startWidth; t < startWidth + 2; t++) {
System.out.print(Num[k][t]);
}
}
System.out.print(")");
return;
}
System.out.print("(");
for (int k=0; k<2; k++) {
for (int t=0; t<2; t++) {
input(startHeight + k * (size/2),
startWidth + t * (size/2) , size/2);
}
}
System.out.print(")");
return;
}
}
}
System.out.print(num);
}
}