문 제
소 스 코 드
#include<iostream>
void Paper();
void Slice(int **, const int&, const int&, const int&, int*);
bool Compare(int **, const int&, const int&, const int&, int*);
int main() {
Paper();
return 0;
}
void Paper() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
int N;
std::cin >> N;
int **paper{ new int*[N] };
for (int i = 0; i < N; ++i) paper[i] = new int[N];
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
std::cin >> paper[i][j];
}
}
int arr[3]{ 0, };
Slice(paper, N, 0, 0, arr);
for (int i = 0; i < 3; ++i) std::cout << arr[i] << '\n';
for (int i = 0; i < N; ++i) delete[] paper[i];
delete[] paper;
}
void Slice(int ** p, const int& n, const int& x, const int& y, int* a) {
if(Compare(p,n,x,y,a)) return;
else {
int num0{ n / 3 };
int num1{ num0 * 2 };
Slice(p, num0, x, y, a);
Slice(p, num0, x + num0, y, a);
Slice(p, num0, x + num1, y, a);
Slice(p, num0, x, y + num0, a);
Slice(p, num0, x + num0, y + num0, a);
Slice(p, num0, x + num1, y + num0, a);
Slice(p, num0, x, y + num1, a);
Slice(p, num0, x + num0, y + num1, a);
Slice(p, num0, x + num1, y + num1, a);
}
}
bool Compare(int ** p, const int& n, const int& x, const int& y, int* a) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (p[x][y] != p[x + i][y + j]) return false;
}
}
if (-1 == p[x][y]) ++a[0];
else if (0 == p[x][y]) ++a[1];
else if (1 == p[x][y]) ++a[2];
return true;
}
풀 이
위의 문제와 다르게 9개의 조각으로 나누는 문제이다.
출 력 값
문 제 출 처
문제 링크 : https://www.acmicpc.net/problem/1780
1780번: 종이의 개수
N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1의 세 값 중 하나가 저장되어 있다. 우리는 이 행렬을 적절한 크기로 자르려고 하는데, 이때 다음의 규칙에 따라 자르려고 한다.
www.acmicpc.net
'[ ALGORITHM ] > [ 백 준 ]' 카테고리의 다른 글
[BAEKJOON] 11401번 : 이항 계수 3 (0) | 2020.08.05 |
---|---|
[BAEKJOON] 1629번 : 곱셈 * (0) | 2020.08.04 |
[BAEKJOON] 1992번 : 쿼드트리 (0) | 2020.08.02 |
[BAEKJOON] 2630번 : 색종이 만들기 (0) | 2020.08.01 |
[BAEKJOON] 5430번 : AC (0) | 2020.07.31 |