Jun's Development Journey

[BOJ] 2630 색종이 만들기 본문

BOJ/Division-Conquer

[BOJ] 2630 색종이 만들기

J_Jayce 2021. 3. 12. 12:59

문제

www.acmicpc.net/problem/2630

 

2630번: 색종이 만들기

첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.

www.acmicpc.net

풀이

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

public class Main {
	
	static int[][] paper;
	static int N;
	static int[] cnt;
	
	static void get_paper_num(int rs, int cs, int N) {
		boolean chk = true;
		int color = paper[rs][cs];
		for(int i=0;i<N;i++) {
			if(chk) {
				for(int j=0;j<N;j++) {
					if(paper[rs+i][cs+j]!=color) {
						chk = false;
						break;
					}
				}	
			}
			else
				break;
		}
		if(chk) {
			cnt[paper[rs][cs]]++;
			return;
		}
			
		get_paper_num(rs,cs,N/2);
		get_paper_num(rs,cs+N/2,N/2);
		get_paper_num(rs+N/2,cs,N/2);
		get_paper_num(rs+N/2,cs+N/2,N/2);
	}
	public static void main(String[] args) throws IOException {
        //선언 및 입력
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer st;
    	StringBuilder sb = new StringBuilder();
    	N = Integer.parseInt(br.readLine());
    	paper = new int[N][N];
    	cnt = new int[2];
    	Arrays.fill(cnt, 0);
    	for(int i=0;i<N;i++) {
    		st = new StringTokenizer(br.readLine());
    		for(int j=0;j<N;j++) {
    			paper[i][j] = Integer.parseInt(st.nextToken());
    		}
    	}
    	
    	//계산
    	get_paper_num(0,0,N);
    	for(int c:cnt)
    		System.out.println(c);
	}
} 

'BOJ > Division-Conquer' 카테고리의 다른 글

[BOJ] 4779번 칸토어 집합  (0) 2021.05.12
[Practice] 합병 정렬  (0) 2021.03.11