본문 바로가기
전공공부/코딩테스트

(c++) 백준 "1992) 쿼드 트리"

by 시아나 2022. 6. 9.

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

 

1992번: 쿼드트리

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

www.acmicpc.net


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

int check(string &str) {
	if (str.compare("0") == 0) {
		return 0;
	}
	else if (str.compare("1") == 0) {
		return 1;
	}
	else {
		return 2;
	}
}

int main() {
	int N; cin >> N;
	vector<vector<string>> board;
	for (int i = 0; i < N; i++) {
		string str; cin >> str;
		vector<string> tmp;
		for (int k = 0; k < N; k++) {
			string s; s += str[k];
			tmp.push_back(s);
		}
		board.push_back(tmp);
	}
	while (board.size() > 1) {
		vector<vector<string>> tmp;
		for (int i = 0; i < board.size(); i+= 2) {
			vector<string> row;
			for (int k = 0; k < board.size(); k+=2) {
				int count[3] = { 0 };
				count[check(board[i][k])]++;
				count[check(board[i][k+1])]++;
				count[check(board[i+1][k])]++;
				count[check(board[i+1][k+1])]++;
				if (count[2] > 0 || (count[0] > 0 && count[1] > 0)) {
					string str = "(";
					str += board[i][k] + board[i][k + 1] + board[i + 1][k] + board[i + 1][k + 1];
					str += ")";
					row.push_back(str);
				}
				else if(count[0]>0){
					row.push_back("0");
				}
				else {
					row.push_back("1");
				}
			}
			tmp.push_back(row);
		}
		board.assign(tmp.begin(), tmp.end());
	}
	cout << board[0][0] << endl;
	return 0;
}