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

93 삐약 : 백준 1780| 종이의 개수 [바킹독| 재귀 |JAVA]

우주수첩 2024. 9. 10. 15:17
728x90

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

 

package BKD_0x0B_Recursion;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_1780 {
    static int[][] input;
    static int minus, zero, plus =0;

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

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

        int n = Integer.parseInt(st.nextToken());

        input = new int[n][n];

        // 배열 입력값
        for(int i=0;i<n;i++){
            st = new StringTokenizer(br.readLine());
            for(int j=0;j<n;j++){
                input[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        func(n,0,0);

        System.out.println(minus);
        System.out.println(zero);
        System.out.println(plus);



    }


    // 시작점 a, b 한 변의 길이 n
    static void func(int n, int a, int b){
        if(check(n,a,b)){
            int val = input[a][b];
            if(val == -1) minus++;
            if(val == 0 ) zero ++;
            if(val == 1) plus++;
            return;

        }

        int newN = n/3;
        for(int i=a;i<a+n;i+=newN){
            for(int j=b;j<b+n;j+=newN){
                func(newN,i,j);
            }
        }
    }


    // 한 변의 길이 , 시작점 a,b
    static boolean check(int n, int a, int b){
        int 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