algorithm'''problem solve
[백준] 1780 - 종이의 개수(설명X)
JunHwa Park
2020. 4. 21. 10:45
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <cstdio> using namespace std; int mm = 0, zero = 0, pp = 0; int papers(int** arr, int x, int y, int size) { int val = arr[x][y]; bool one = true; for (int i = 0; i < size && one; i++) { for (int j = 0; j < size && one; j++) { if (val != arr[i + x][j + y]) one = false; } } if (one) { switch (arr[x][y]) { case -1: mm++; break; case 0: zero++; break; case 1: pp++; break; } return 1; } int tmp = size / 3; return papers(arr, x, y, tmp) + papers(arr, x, y + tmp, tmp) + papers(arr, x + tmp, y, tmp) + papers(arr, x, y + 2 * tmp, tmp) + papers(arr, x + tmp, y + tmp, tmp) + papers(arr, x + 2 * tmp, y, tmp) + papers(arr, x + tmp, y + 2 * tmp, tmp) + papers(arr, x + 2 * tmp, y + tmp, tmp) + papers(arr, x + 2 * tmp, y + 2 * tmp, tmp); } int main() { int N; scanf("%d", &N); int** arr = new int* [N]; for (int i = 0; i < N; i++) arr[i] = new int[N]; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { scanf("%d", &arr[i][j]); } } papers(arr, 0, 0, N); printf("%d\n%d\n%d\n", mm, zero, pp); } | cs |