#문제

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

 

1780번: 종이의 개수

N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1의 세 값 중 하나가 저장되어 있다. 우리는 이 행렬을 적절한 크기로 자르려고 하는데, 이때 다음의 규칙에 따라 자르려고 한다. 만약 종이가 모두 같은 수로 되어 있다면 이 종이를 그대로 사용한다. (1)이 아닌 경우에는 종이를 같은 크기의 9개의 종이로 자르고, 각각의 잘린 종이에 대해서 (1)의 과정을 반복한다. 이와 같이 종이를 잘랐을 때, -1로만 채워진 종이의 개수, 0으

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
#include <iostream>
using namespace std;
 
int n;
int paper[2188][2188];
int d[9][2= {{0,0}, {0,1}, {0,2},
               {1,0}, {1,1}, {1,2},
               {2,0}, {2,1}, {2,2}};
int papernum[3];        // -1, 0, 1으로 채워진 종이의 개수 저장.
                        // 해당 수 +1 인덱스에 값을 저장. 
                        
void cut(int x, int y, int size){
    int first = paper[x][y];
    bool same = true;
    
    ifsize==1 ){
        papernum[first+1]++;
        return;
    }
    
    for(int i=x; i<x+size; i++){
        for(int j=y; j<y+size; j++){
            if( paper[i][j]!=first){
                same = false;                
            }
        }
    }
    
    if( same ){
        papernum[first+1]++;
        return;
    }
    else{
        for(int i=0; i<9; i++){
            cut(x+d[i][0]*size/3, y+d[i][1]*size/3size/3);
        }
    }
}
 
int main(){
    cin>>n;
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            cin>>paper[i][j];
        }
    }
    
    cut(11, n);
    for(int i=0; i<3; i++){
        cout<<papernum[i]<<'\n';
    }
    return 0;
}
cs

##

2630 색종이 만들기 문제와 동일하다!

'BOJ' 카테고리의 다른 글

BOJ 1956번 :: 운동  (0) 2019.12.25
BOJ 1629번 :: 곱셈  (0) 2019.12.24
BOJ 1992번 :: 쿼드트리  (0) 2019.12.24
BOJ 9375번 :: 패션왕 신해빈  (0) 2019.12.23
BOJ 2630번 :: 색종이 만들기  (0) 2019.12.22

+ Recent posts