728x90
import java.util.Scanner;
public class BJ2805 {
private static int whiteCount = 0;
private static int blueCount = 0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 종이의 크기 N 입력
int N = scanner.nextInt();
int[][] paper = new int[N][N];
// 종이의 색 입력 (0: 하얀색, 1: 파란색)
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
paper[i][j] = scanner.nextInt();
}
}
// 종이를 나누는 함수 호출
dividePaper(paper, 0, 0, N);
System.out.println(whiteCount);
System.out.println(blueCount);
}
private static void dividePaper(int[][] paper, int x, int y, int size) {
if (isUniformColor(paper, x, y, size)) {
if (paper[x][y] == 0) {
whiteCount++;
} else {
blueCount++;
}
} else {
int newSize = size / 2;
dividePaper(paper, x, y, newSize);
dividePaper(paper, x, y + newSize, newSize);
dividePaper(paper, x + newSize, y, newSize);
dividePaper(paper, x + newSize, y + newSize, newSize);
}
}
private static boolean isUniformColor(int[][] paper, int x, int y, int size) {
int color = paper[x][y];
for (int i = x; i < x + size; i++) {
for (int j = y; j < y + size; j++) {
if (paper[i][j] != color) {
return false;
}
}
}
return true; // 모두 같은 색이면 true
}
}
분할 + 정복
728x90
'백준' 카테고리의 다른 글
백준 1931 - Java (0) | 2024.10.24 |
---|---|
백준 2630 - Java (0) | 2024.10.24 |
백준 1927 - Java (0) | 2024.10.23 |
백준 1541 - Java (0) | 2024.10.22 |
백준 1074 - Java (0) | 2024.10.21 |