Notice
Recent Posts
문제 풀이 및 개발 공간
[백준] 2630번 색종이 만들기 (silver 2 본문
import java.io.*;
import java.util.*;
public class Main{
static int blue=0;
static int white=0;
static int[][] map;
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n=Integer.valueOf(br.readLine());
map=new int[n+1][n+1];
for(int i=1; i<=n; i++){
st=new StringTokenizer(br.readLine());
for(int j=1; j<=n; j++){
map[i][j]=Integer.valueOf(st.nextToken());
}
}
div(1,1,n);
bw.write(white+"\n");
bw.write(blue+"\n");
bw.flush();
}
public static void div(int x, int y, int l){
int num=map[y][x];
boolean is=true;
for(int i=y; i<y+l; i++){
for(int j=x; j<x+l; j++){
if(num!=map[i][j]){
is=false;
break;
}
}
}
if(is){
blue= num==1 ? blue+1 : blue;
white= num==0 ? white+1 : white;
return;
}
else{
div(x,y,l/2);
div(x+l/2, y, l/2);
div(x,l/2+y,l/2);
div(l/2+x, l/2+y, l/2);
}
}
}
// 아이디어 문제에서 대놓고 4등분씩 쪼개면서 나눈다고 나옴. 즉 재귀+분할 문제이다.
// 나누어지는 분기점과 나머지 색이 다르면 무조건 쪼개야하므로, 판단기준으로 두고 계속 분할
// 주어진 영역이 다 색이 같으면 나눌 필요가 없다.
// 나누어야 할 경우에는 4등분을 하므로, 4가지 경우를 재귀함수를 돌린다.
'백준공부 > java' 카테고리의 다른 글
[백준] 2023번 신기한 소수 (gold 5 (2) | 2023.12.26 |
---|---|
[백준] 11003번 최솟값 찾기 (platinum 5 (0) | 2023.12.24 |
[백준] 1647번 도시 분할 계획 (gold 4 (0) | 2023.12.24 |
[백준] 10026번 적록색약 (gold 5 (0) | 2023.12.21 |
[백준] 2225번 합분해 (gold 5 (0) | 2023.12.21 |