https://www.acmicpc.net/problem/9934
트리 형태로 구현하면 된다. 그리고 높이별로 인쇄하면 됨
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 |