본문 바로가기
C++/백준

[C++백준] 실버 3/ 2630번 색종이 만들기

by Meaning_ 2022. 2. 4.
728x90
반응형

https://www.acmicpc.net/problem/2630

 

2630번: 색종이 만들기

첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.

www.acmicpc.net

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
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
 
using namespace std;
 
 
static int** arr;
static int ans[2];
 
bool check(int row, int col, int num) {
 
    int standard = arr[row][col];
    for (int i = row; i < row + num; i++) {
        for (int j = col; j < col + num; j++) {
            if (standard != arr[i][j]) {
                return false;
            }
        }
    }
    return true;
}
int  divide(int row, int col, int num) {
    if (check(row, col, num)) {
        ans[arr[row][col]]++;
    }
    else {
        int div = num / 2;
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 2; j++) {
                divide(row + (i * div), col + (j * div), div);
            }
        }
    }
    return 0;
 
}
 
int main() {
    int n;
    scanf("%d"&n);
    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]);
        }
    }
 
 
    divide(00, n);
 
    for (int i = 0; i < 2; i++) {
        printf("%d\n", ans[i]);
    }
 
    return 0;
}
cs

분할정복을 복습할겸 쉬운문제로 풀어봤다.

이걸 풀면서 정말 어처구니 없는 실수를 했는데 식별자를 찾을 수 없다는 에러를 만났다.

알고보니 check함수랑 divide함수를 main함수 뒤에 써줘서 컴파일 도중에 모르는 함수를 만나서 생긴 오류였다.

앞으론 main함수 위에 써주자. 자바를 계속 쓰다보니 헷갈린다..

728x90
반응형

댓글