[ ALGORITHM ]/[ 백 준 ]

[BAEKJOON] 1780번 : 종이의 개수

HiStar__ 2020. 8. 3. 15:20

문 제

 

소 스  코 드

#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;
}

 

풀 이

 

1780번 : 색종이 만들기

위의 문제와 다르게 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