dnc 문제다. dp함수의 인자로는 왼쪽위 좌표 x,y와 정사각형의 크기 s를 넘겨주었으며


x,y부터 s*s사이즈의 배열을 다 돌아보면서 sun에 누적한 후 sum==s*s면 1, 0이면 0, 그것도 아니라면


"("를 출력한 뒤 왼쪽위, 오른쪽위, 왼쪽아래, 오른쪽아래를 조회하고 ")"를 출력하도록 하면 된다.


정사각형 한 변의 크기가 최대 64이므로 int로 받으면 안된다. char로 받거나 %1d로 받으면 편하다.


<코드>

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
#include <stdio.h>
 
int n, a[64][64];
 
void dp(int x, int y, int s) {
    int sum = 0;
    for (int i = 0; i < s; i++for (int j = 0; j < s; j++) sum += a[x + i][y + j];
    if (sum == s*s) printf("1");
    else if (!sum) printf("0");
    else {
        printf("(");
        s /= 2;
        dp(x, y, s);
        dp(x, y + s, s);
        dp(x + s, y, s);
        dp(x + s, y + s, s);
        printf(")");
    }
}
 
int main() {
    scanf("%d"&n);
    for (int i = 0; i < n; i++for (int j = 0; j < n; j++scanf("%1d"&a[i][j]);
    dp(00, n);
    return 0;
}
cs


'BOJ' 카테고리의 다른 글

2959 거북이  (0) 2017.10.03
1874 스택수열  (0) 2017.10.03
1322 X와 K  (0) 2017.10.03
1987 알파벳  (0) 2017.10.03
1269 대칭 차집합  (0) 2017.10.03

+ Recent posts