#include <bits/stdc++.h>
using namespace std;
#define INT long long int 

INT n;
INT arr[129][129];
INT chk0, chk1; 
INT cnt0, cnt1;
void F(INT x, INT y, INT l)
{
  if(l == 1) {
    if(arr[y][x] == 1)  cnt1++;
    else  cnt0++;
    return;
  }
  for(int i=y; i<y+l; i++) {
    for(int j=x; j<x+l; j++) {
      if(arr[i][j] == 0)
        chk0 = 1;
      else
        chk1 = 1;
    }
  }

  if(chk0 && chk1)
  {
    chk0 = chk1 = 0;
    F(x, y, l/2);
    chk0 = chk1 = 0;
    F(x, y + l/2, l/2);
    chk0 = chk1 = 0;
    F(x + l/2, y, l/2);
    chk0 = chk1 = 0;
    F(x + l/2, y + l/2, l/2);
  }
  else{
    if(chk0) cnt0++;
    else  cnt1++;
  }

  
}

int main()
{
  cin >> n;

  for(int i=0; i<n; i++) {
    for(int j=0; j<n; j++) {
      cin >> arr[i][j];
    }
  }

  F(0,0,n);

  cout << cnt0 << endl << cnt1;
  
  return 0;
}

 

-분할정복

 

'코딩 일지 > baekjoon' 카테고리의 다른 글

1992  (0) 2023.12.30
2447  (0) 2023.12.28
1260 dfs와 bfs  (0) 2023.08.30
1655 가운데를 말해요  (0) 2023.08.22
12865 - 평범한 배낭  (0) 2023.08.17

+ Recent posts