<h3>[알고리즘] Java / 백준 / 종이의 개수 / 1780 </h3>

정현명·2022년 4월 4일
0

baekjoon

목록 보기
118/180
post-thumbnail

[알고리즘] Java / 백준 / 종이의 개수 / 1780

문제


문제 링크



접근 방식


현재 종이 안의 값이 모두 일치하지 않으면 9분할한다.

현재 종이 안의 값이 모두 일치하면 그 값을 카운팅 한다.



코드


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

public class Main_1780 {
	
	static int[] cnt;
	static int[][] papers;
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		
		papers = new int[N][N];
		
		for(int i=0;i<N;i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			for(int j=0;j<N;j++) {
				papers[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		cnt = new int[3];
		
		divide(0,0,N);
		for(int i=0;i<3;i++) {
			System.out.println(cnt[i]);
		}
	}
	
	public static void divide(int r, int c, int size) {
		
		boolean isOne = true;
		
		for(int i=r;i<r+size;i++) {
			for(int j=c;j<c+size;j++) {
				if(papers[i][j] == papers[r][c]) continue;
				isOne = false;
				break;
			}
		}
		if(isOne) {
			cnt[papers[r][c]+1]++;
			return;
		}
		
		divide(r,c,size/3);
		divide(r+size/3,c,size/3);
		divide(r+size*2/3,c,size/3);
		divide(r,c+size/3,size/3);
		divide(r+size/3,c+size/3,size/3);
		divide(r+size*2/3,c+size/3,size/3);
		divide(r,c+size*2/3,size/3);
		divide(r+size/3,c+size*2/3,size/3);
		divide(r+size*2/3,c+size*2/3,size/3);
	}

}
profile
꾸준함, 책임감

0개의 댓글