Competition/Baekjoon

[백준] 1992번 자바 쿼드트리

bisi 2020. 4. 1. 10:56
문제 출처 

https://www.acmicpc.net/problem/1992

 

1992번: 쿼드트리

첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1≤N ≤64의 범위를 가진다. 두 번째 줄부터는 길이 N 의 문자열이 N 개 들어온다. 각 문자열은 0 또는 1의 숫자로 이루어져 있으며, 영상의 각 점들을 나타낸다.

www.acmicpc.net

 

 

 

접근 방식 및 풀이

- 분할 정복 알고리즘을 활용하여 해결.

- 문제 자체를 이해하는데 오래걸렸다.. 2*2로 나누고 그안에 원소들이 같은지 체크, 다르면 하나씩 출력하여 준다.

 

 

 

 

소스 코드 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private static int n , m;
    private static int map[][];


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.valueOf(br.readLine());
        map = new int[n][n];
        int[] num = new int[n];
        StringTokenizer st =null;
        for (int i = 0; i < n; i++) {
            String str = br.readLine();
            for (int j = 0; j <n ; j++) {
                map[i][j] = Integer.valueOf(str.substring(j, j+1));
            }
        }
        divide(0,0,n);
    }
    
    // 배열안에 배열이 가지고 있는 요소가 같은지 체크
    private  static boolean check(int row, int col, int n ){
        int std = map[row][col];
        for (int i = row; i <row+n ; i++) {
            for (int j = col; j <col+n ; j++) {
                if(std != map[i][j]){
                    return false;
                }
            }
        }
        m=std;
        return true;
    }
    // 2*2단위로 나누는 작업
    private static void divide(int row, int col, int n ){
        if(check(row, col, n)){
            System.out.print(m);
        }else{
            System.out.print("(");
            int s =n/2;
            for (int i = 0; i <2 ; i++) {
                for (int j = 0; j <2 ; j++) {
                    divide(row+s*i, col+s*j, s);
                }
            }
            System.out.print(")");
        }
    }


}

 

 

 

 

결과 

 

'Competition > Baekjoon' 카테고리의 다른 글

[백준] 11728번 자바 배열 합치기  (0) 2020.04.02
[백준] 2447번 자바 별찍기  (2) 2020.03.31
[백준] 2110번 자바 공유기 설치  (0) 2020.03.31