본문 바로가기

백준/백준

[백준 1992] 쿼드트리

문제    www.acmicpc.net/problem/1192




풀이


( 1 ) 문제 쪼개기


기준점(x,y)과 크기(size)를 잡고

주어진  N*N 배열을 4등분한다.

- ( x , y , size/2 )           ( x+size/2 , y , size/2 ) 

  ( x , y+size/2 , size/2 ) ( x+size/2 , y+size/2 , size/2 ) 


X , Y

X+ SIZE/2 , Y

X, Y+ SIZE/2

X+SIZE/2 , Y+SIZE/2



(2) 확인하기


각각의 구역에 대해서 확인하고, 

해당 구역 내의 모든 값이 동일할 경우 그대로 출력한다.

해당 구역 내의 값이 다를 경우 (1)을 반복한다.



1



코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
 *  Coded by Handal ( 2019.02 )
 */
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Main {
    static BufferedReader brr = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer stt;
    static int[][] file;
 
    public static void main(String[] args) throws IOException {
        int N = Integer.parseInt(brr.readLine());
 
        file = new int[N][N];
        for (int i = 0; i < N; i++) {
            String str = brr.readLine();
            for (int j = 0; j < N; j++)
                file[i][j] = str.charAt(j) - '0';
        }
 
        zip(00, N);
    }
 
    static void zip(int x, int y, int size) {
        boolean b = true;
        int std = file[x][y];
        for (int i = x; i < x + size && b; i++)
            for (int j = y; j < y + size && b; j++)
                if (file[i][j] != std) b = false;
 
        if (b)
            System.out.print(std);
        else {
            int nS = size/2;
            System.out.print("(");
            zip(x, y, nS);
            zip(x, y + nS, nS);
            zip(x + nS, y, nS);
            zip(x + nS, y + nS, nS);
            System.out.print(")");
        }
    }
}
 
cs



'백준 > 백준' 카테고리의 다른 글

[ 백준 1978 ] 소수 찾기  (0) 2019.11.03
[ 백준 9465 ] 스티커  (0) 2019.11.02
[ 백준 1002 ] 터렛  (0) 2019.11.01
[백준 1780] 종이의 개수  (0) 2019.02.09
[백준 2167 ] 2차원 배열의 합  (0) 2019.02.07