종이를 4분할 하여 1분면, 2분면, 3분면, 4분면 각각의 결과에 따라 멈추거나 다시 4분할하여 재귀 함수를 실행하는 알고리즘이다. 구현하는 방식은 어렵지 않다.
package com.yuk;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class No2630 {
static int n;
static int[][] arr;
static int one;
static int zero;
static void dq(int x, int y, int num) {
boolean flag = true;
int first = arr[x][y];
loop :
for (int i = x; i < x+num; i++) {
for (int j = y; j < y+num; j++) {
if(arr[i][j]!=first) {
flag = false;
break loop;
}
}
}
if(flag) {
if(first == 1) one++;
else zero++;
} else {
num=num/2;
dq(x, y, num);
dq(x+num, y, num);
dq(x, y+num, num);
dq(x+num, y+num, num);
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
arr = new int[n][n];
for (int i = 0; i < n; i++) {
String[] strArr = br.readLine().split(" ");
for (int j = 0; j < n; j++) {
arr[i][j] = Integer.parseInt(strArr[j]);
}
}
dq(0,0,n);
System.out.println(zero);
System.out.println(one);
}
}
'Data Structure & Algorithm > 백준' 카테고리의 다른 글
No7576 토마토 (너비 우선 탐색) (0) | 2022.11.21 |
---|---|
No1260 DFS와 BFS(그래프 이론: 너비우선탐색, 깊이우선탐색) (0) | 2022.11.18 |
No1931 회의실 배정 (그리디 알고리즘) (0) | 2022.11.08 |
No1389 케빈 베이컨의 6단계 법칙(플로이드 와샬 알고리즘) (0) | 2022.11.02 |
Class2 돌파! (0) | 2022.10.27 |