1992 - 쿼드트리

slee2·2021년 12월 27일
0

백준

목록 보기
4/20

문제

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);
    }
}

0개의 댓글

관련 채용 정보