개발자일걸요..?

2630번 색종이 만들기 본문

알고리즘코딩/Baekjoon Online Judge

2630번 색종이 만들기

Re_A 2021. 3. 1. 19:16
728x90
반응형

문제링크 : www.acmicpc.net/problem/2630

 

2630번: 색종이 만들기

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

www.acmicpc.net



<알고리즘>

  1) 주어진 수들을 vector에 넣기

  2) vector를 4분할로 나누는 쿼드트리를 이용하여 병합 가능한지 확인

     2-1) 병합이 불가능하면 pass(반복을 통해 그부분을 또 4분할 할것이기에)

     2-2) 병합이 가능하면 answer에 병합된 부분 색 입력

  3) 병합이 안되는 부분의 4분할을 반복해서 answer에 결과값 입력

  4) answer에서 숫자 1과 0을 세서 결과값 출력 

 

 

 

+) 아주 많이 참고한 블로그

chessire.tistory.com/entry/%EC%BF%BC%EB%93%9C%ED%8A%B8%EB%A6%ACQuad-tree

 

쿼드트리(Quad tree)

 자료구조 카테고리를 만들까 하다가 알고리즘 카테고리에 작성합니다. 쿼드트리란?  트리 자료구조중 하나로 부모 노드 아래에 자식 노드를 4개(Quad)씩 가지고 있는 트리입니다. 이미지 용량,

chessire.tistory.com

 

 

 

메모리 : 2152KB     시간 : 4ms

#include<iostream>
#include<vector>
#include<string>
using namespace std;
string answer = "";

void quadTree(vector<vector<int>> &p, int X, int Y, int size) {
	bool iscombine = true;
	int begin = p[X][Y];
	for (int y = Y; y < Y + size; y++) {
		for (int x = X; x < X + size; x++) {
			if (begin != p[x][y]) {
				iscombine = false;
				break;
			}
		}
		if (iscombine == false) break;
	}

	if (iscombine) {
		answer.append(to_string(begin));
		return;
	}

	size = int(size / 2);
	answer.append("(");
	quadTree(p, X, Y, size);
	quadTree(p, X + size, Y, size);
	quadTree(p, X, Y + size, size);
	quadTree(p, X + size, Y + size, size);
	answer.append(")");
}
int main() {
	int N = 0;
	cin >> N;
	
	vector<vector<int>> paper(N + 1, vector<int>(N + 1));
	int input = 0;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			cin >> input;
			paper[i][j] = input;
		}
	}

	quadTree(paper, 0, 0, N);

	int white = 0;
	int blue = 0;
	for (unsigned int i = 0; i < answer.size(); i++) {
		if (answer[i] == '(' || answer[i] == ')')
			continue;
		else if (answer[i] == '1') ++blue;
		else if (answer[i] == '0')++white;
	}
	cout << white << "\n" << blue;
	return 0;
}
반응형

'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글

1780번 종이의 개수  (0) 2021.03.01
1992번 쿼드트리  (0) 2021.03.01
10816번 숫자카드2  (0) 2021.02.28
1920번 수 찾기  (0) 2021.02.28
5430번 AC  (0) 2021.02.27
Comments