๋ฌธ์
9934๋ฒ: ์์ ์ด์ง ํธ๋ฆฌ
์๊ทผ์ด๋ ์ฌ๋ก๋ฒ ๋์์ ๋์ Donji Andrijevci๋ฅผ ์ฌํํ๊ณ ์๋ค. ์ด ๋์์ ๋๋ก๋ ๊น์ด๊ฐ K์ธ ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ์ด๋ฃจ๊ณ ์๋ค. ๊น์ด๊ฐ K์ธ ์์ ์ด์ง ํธ๋ฆฌ๋ ์ด 2K-1๊ฐ์ ๋ ธ๋๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. (์๋
www.acmicpc.net
์ฝ๋
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<int>height[1025];
vector<int>v(1025);
void inorder(int start, int end, int level){
if(start > end) return;
int mid = (start+end)/2;
height[level].push_back(v[mid]);
inorder(start, mid-1, level+1);
inorder(mid+1, end, level+1);
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int K; cin>>K;
for(int i=0; i<pow(2,K)-1; i++){
cin>>v[i];
}
inorder(0, pow(2,K)-2, 1);
for(int i=1; i<=K; i++){
for(auto it: height[i]){
cout<<it<<' ';
}
cout<<'\n';
}
}
ํ์ด
์ด์งํธ๋ฆฌ๋ฅผ ์ค์ ์ํ(inorder) ๋ฐฉ์์ผ๋ก ์ํํ๋ฉด์ ๊ฐ ๋ ๋ฒจ ๋ณ ๋ ธ๋๋ฅผ ์ ๋ถ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ ๋๋ค.
์ค์ ์ํ์ ๊ฐ๋ ์ ์๋ ๊ฒ์๊ธ์์ ์ ๋ฆฌํ ์ ์ด ์์ต๋๋ค.
์ด์งํธ๋ฆฌ ํ์ ์ดํ๋ฒ
์ด์งํธ๋ฆฌ(Binary Tree) ๋ถ๋ชจ์ ์์์ผ๋ก ๋๋์ด ์๋ ํธ๋ฆฌ ๊ทธ๋ํ ๋ ธ๋์ ์ต๋ ์ฐจ์๊ฐ 2์ด๋ฉฐ, ๊ฐ๊ฐ ์ผ์ชฝ ์์(left child), ์ ์ค๋ฅธ์ชฝ ์์(right child)์ผ๋ก ๋๋ฉ๋๋ค. ์ด์งํธ๋ฆฌ์ ์ํ ์ด์งํธ๋ฆฌ์ ์ํ์
dkswnkk.tistory.com
ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์์ด๋์ด๋ ๋ฃจํธ ๋ ธ๋(mid)๋ฅผ ์ฐพ์ ๋ค์ ๋ฃจํธ ๋ ธ๋๋ฅผ ๊ธฐ์ ์ผ๋ก ๋ค์ ์ข์ฐ๋ก ๋ฃจํธ ๋ ธํธ(mid)๋ฅผ ์ฐพ๋ ๋ฐฉ์์ผ๋ก ํ ์ ์์ต๋๋ค.
- ๋ฃจํธ ๋ ธ๋ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ค๊ฐ๊ฐ์ด ๋ฃจํธ๊ฐ์ด ๋๋ค.
- ๋ฃจํธ๋ฅผ ๊ตฌํ ํ์๋ [์ฒ์~์ค๊ฐ-1], [์ค๊ฐ+1~๋]์ผ๋ก ๋ฒ์๋ฅผ ๋๋๊ณ ๊ฐ๊ฐ์ ๋ฒ์์์ ๋ค์ ์ค๊ฐ๊ฐ์ ์ฐพ๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 6416๋ฒ - ํธ๋ฆฌ์ธ๊ฐ? (0) | 2022.06.30 |
---|---|
[๋ฐฑ์ค,c++] 1068๋ฒ - ํธ๋ฆฌ (0) | 2022.06.21 |
[๋ฐฑ์ค,c++] 5539๋ฒ - ์ด์ง ๊ฒ์ ํธ๋ฆฌ (0) | 2022.06.21 |
[๋ฐฑ์ค,c++] 1655๋ฒ - ๊ฐ์ด๋ฐ๋ฅผ ๋งํด์ (0) | 2022.06.21 |
[๋ฐฑ์ค,c++] 12764๋ฒ - ์ธ์ง๋ฐฉ์ ๊ฐ ์คํ (0) | 2022.06.20 |
[๋ฐฑ์ค,c++] 17255๋ฒ - N์ผ๋ก ๋ง๋ค๊ธฐ (0) | 2022.06.20 |
๋๊ธ