🐣 알고리즘 삐약/💻 백준 삐약

95 삐약 : 백준 2630 | 쿼드트리 [바킹독| 재귀 |JAVA]

우주수첩 2024. 9. 11. 00:38
728x90

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

 

 

package BKD_0x0B_Recursion;

import java.io.*;
import java.util.StringTokenizer;

public class BOJ_1992 {
    static char[][] input;
    static int white, blue =0;

    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));


    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        StringTokenizer x = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(br.readLine());

        input = new char[n][n];

        // 배열 입력값
        for(int i=0;i<n;i++){
            String str = br.readLine();
            for(int j=0;j<n;j++){
                input[i][j] = str.charAt(j);
            }
        }

        func(n,0,0);

        bw.flush();
        bw.close();

    }


    // 시작점 a, b 한 변의 길이 n
    static void func(int n, int a, int b) throws IOException{
        if(check(n,a,b)){

            int val = input[a][b];
            bw.write(val);

            return;

        }
        bw.write('(');


        int newN = n/2;
        for(int i=a;i<a+n;i+=newN){
            for(int j=b;j<b+n;j+=newN){
                func(newN,i,j);
            }
        }
        bw.write(')');
    }


    // 한 변의 길이 , 시작점 a,b
    static boolean check(int n, int a, int b){
        char init = input[a][b];
        for(int i=a;i<a+n;i++){
            for(int j=b;j<b+n;j++){
                if(init != input[i][j]) {
                    return false;
                }
            }
        }
        return true;
    }
}

 

 

 

재귀가 발생하는 곳 기준 앞 뒤에 괄호를 두어야 한다고 판단하였다.

728x90