문제
https://www.acmicpc.net/problem/1780
1780번: 종이의 개수
N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수
www.acmicpc.net
코드
import java.util.*;
import java.io.*;
public class Main {
static int n;
static int board[][];
static int answer[] = new int [3];
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n = Integer.parseInt(br.readLine());
board = new int [n][n];
for(int i=0;i<n;i++) {
st = new StringTokenizer(br.readLine());
for(int j=0;j<n;j++) {
board[i][j] = Integer.parseInt(st.nextToken());
}
}
recursion(n, 0, 0);
for(int i=0;i<3;i++) {
System.out.println(answer[i]);
}
}
static void recursion(int k, int r, int c) {
if(equalPaper(k, r, c)) {
answer[board[r][c] + 1] += 1;
return;
}
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
recursion(k/3, r + (k / 3 *i), c + (k / 3 * j) );
}
}
}
static boolean equalPaper(int k, int r, int c) {
for(int i=r;i<r+k;i++) {
for(int j=c;j<c+k;j++) {
if(board[i][j] != board[r][c])
return false;
}
}
return true;
}
}