알고리즘

[boj9934/c++] 완전 이진 트리

IT 참다랑어 2023. 5. 1. 22:39

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

 

9934번: 완전 이진 트리

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

www.acmicpc.net

원래 재귀로 탐색하면서 트리 모양대로 입력된 수를 다시 배열하는 식으로 푸는 문제인 것 같은데

탐색 순서에서 규칙이 보여서 굳이 배열을 하나 더 만들지 않아도 수학적으로 풀 수 있을 것 같아서 그렇게 해결함

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

vector<int> vec;
int K, temp;

int main() {
	cin >> K;
	int num = 1;

	for (int i = 0; i < K; i++) {
		num *= 2;
	}
	num--;

	for (int i = 0; i < num; i++) {
		cin >> temp;
		vec.push_back(temp);
	}

	int idx = num / 2;
	int d = num + 1;
	num = 1;
	for (int i = 0; i < K; i++) {
		for (int j = 0; j < num; j++) {
			cout << vec[idx + j * d] << ' ';
			
		}
		cout << '\n';
		num *= 2;
		idx /= 2;
		d /= 2;
	}
}