https://www.acmicpc.net/problem/9934
원래 재귀로 탐색하면서 트리 모양대로 입력된 수를 다시 배열하는 식으로 푸는 문제인 것 같은데
탐색 순서에서 규칙이 보여서 굳이 배열을 하나 더 만들지 않아도 수학적으로 풀 수 있을 것 같아서 그렇게 해결함
#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 |