본문 바로가기

알고리즘/백준

백준 9934 완전 이진 트리

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

 

9934번: 완전 이진 트리

문제 상근이는 슬로베니아의 도시 Donji Andrijevci를 여행하고 있다. 이 도시의 도로는 깊이가 K인 완전 이진 트리를 이루고 있다. 깊이가 K인 완전 이진 트리는 총 2K-1개의 노드로 이루어져 있다. (��

www.acmicpc.net

 

트리 형태로 구현하면 된다. 그리고 높이별로 인쇄하면 됨 

queue를 이용했다. (Inorder 순회 같기도?)

 

/* 완전 이진 트리*/

#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>

#define MAX 1024 + 1

using namespace std;

void input();
void solve();

int K, n_in_height;
int in[MAX],building[MAX];

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	input();
	solve();

	return 0;
}

void input() {
	cin >> K;
	n_in_height = pow(2, K) - 1;
	for (int i = 1; i <= n_in_height; i++) {
		cin >> in[i];
	}
}

void solve() {
	queue<pair<int,int>> q;
	
	int l, r;
	q.push({ 1, n_in_height });
	
	while (!q.empty()) {
		int q_size = q.size();
		while (q_size--) {
			l = q.front().first;
			r = q.front().second;
			q.pop();

			int mid = (l + r) / 2;
			
			cout << in[mid] << " ";
			if(l < mid)
				q.push({ l, mid-1 });
			if( mid < r)
				q.push({ mid + 1, r });
		}
		cout << '\n';
	}
}

'알고리즘 > 백준' 카테고리의 다른 글

백준 1700 멀티탭 스케줄링  (0) 2020.07.31
백준 5052 전화번호 목록  (0) 2020.07.30
백준 3665 최종 순위  (0) 2020.07.26
백준 16234 인구 이동  (0) 2020.07.26
백준 1799 비숍  (0) 2020.07.24