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;
}
}'알고리즘' 카테고리의 다른 글
| [boj11728/c++] 배열 합치기 (0) | 2023.05.04 |
|---|---|
| [boj4963, boj15652/c++] 섬의 개수, N과 M(4) (0) | 2023.05.02 |
| [boj1389/c++] 케빈 베이컨의 6단계 법칙 (0) | 2023.05.01 |
| [boj1874/c++] 스택 수열 (0) | 2023.04.27 |
| [boj 1753/c++] 최단경로 (0) | 2023.04.27 |