개발자일걸요..?

1992번 쿼드트리 본문

알고리즘코딩/Baekjoon Online Judge

1992번 쿼드트리

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

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

 

1992번: 쿼드트리

첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또

www.acmicpc.net



<알고리즘>

  1) getline으로 input받고 하나씩 vector에 저장(숫자 다음에 오는 입력을 getline으로 받기 위해선 개행 때문에 cin.ignore()이 필요하다)

  2) quadTree 알고리즘을 이용해 vector를 4분할하여 병합가능한지 확인

    2-1) 병합 가능하면 answer에 병합한 색깔숫자 입력

    2-2) 병합불가능하면 다시 4분할 하여 병합가능한지 확인

  3) 형식에 맞춰 추가된 answer를 출력

 

 

 

 

메모리 : 2020KB    시간 : 0ms

#include<iostream>
#include<string>
#include<vector>
using namespace std;

string answer = "";
void quadTree(vector<vector<int>> &input, int X, int Y, int size) {
	bool isCombine = true;
	int begin = input[X][Y];
	for (int j = Y; j < Y + size; j++) {
		for (int i = X; i < X + size; i++) {
			if (begin != input[i][j]) {
				isCombine = false;
				break;
			}
		}
		if (isCombine == false) break;
	}

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

	size = (int)(size / 2);
	answer.append("(");
	quadTree(input, X, Y, size);
	quadTree(input, X, Y + size, size);
	quadTree(input, X + size, Y, size);
	quadTree(input, X + size, Y + size, size);
	answer.append(")");
}
int main() {
	int N = 0;
	cin >> N;
	cin.ignore();
	vector<vector<int>> input(N,vector<int>(N));
	for (int i = 0; i < N; i++) {
		string temp = "";
		getline(cin, temp);
		for (int j = 0; j < N; j++) {
			input[i][j] = temp[j]-'0';
		}
	}
	quadTree(input, 0, 0, N);
	cout << answer;

	return 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

 

반응형

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

1629번 곱셈  (0) 2021.03.02
1780번 종이의 개수  (0) 2021.03.01
2630번 색종이 만들기  (0) 2021.03.01
10816번 숫자카드2  (0) 2021.02.28
1920번 수 찾기  (0) 2021.02.28
Comments