Jun's Development Journey
[BOJ] 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 |