🐣 알고리즘 삐약/💻 백준 삐약
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