[๋ฐฑ์ค] #4325 ํธ๋ฆฌ๐ฒ
- ๋ฐฑ์ค #4325 ํธ๋ฆฌ
- ์ฌ์ฉ์ธ์ด : C++
- ๋ฌธ์ ๋ฑ๊ธ : ๊ณจ๋ โ ข ๐ฅ
๋ฌธ์
- ์์
์ด๋ ํ ํธ๋ฆฌ๋ฅผ ์ ์, ์ค์ ์ํํ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๊ฐ ์ฃผ์ด์ง๊ณ , ์ด๋ฅผ ์ด์ฉํด ํธ๋ฆฌ๋ฅผ ํ์ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๋ถ์
์ฃผ์ด์ง ์์๋ฅผ ๋ถ์ํด๋ณด์.
- ์ ์ ์ํ :
3 6 5 4 8 7 1 2
- ์ค์ ์ํ :
5 6 8 4 3 1 2 7
-
์ ์ ์ํ ๊ฒฐ๊ณผ์ ์ฒ์ ๊ฐ =
3
= ๋ฃจํธ ๋ ธ๋ -
์ค์ ์ํ ๊ฒฐ๊ณผ์์
3
์ ๊ธฐ์ค์ผ๋ก left tree์ right tree๊ฐ ๋๋จ :5 6 8 4
3
1 2 7
-
์ ์ ์ํ ๊ฒฐ๊ณผ์ ๋๋ฒ์งธ ๊ฐ =
6
= left tree์ ๋ฃจํธ ๋ ธ๋ -
2์์ ๊ตฌํ left tree์์ ,
6
์ ๊ธฐ์ค์ผ๋ก left tree์ left , right๊ฐ ๋๋จ :5
6
8 4
...๋ฐ๋ณต...
๋ฃจํธ ๋
ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก left , right ํธ๋ฆฌ๊ฐ ๋ถ๋ฆฌ๋๊ณ ,
left , right ํธ๋ฆฌ์์ ๋ค์ ๊ฐ๊ฐ์ ๋ฃจํธ ๋
ธ๋๋ฅผ ์ฐพ๋ ๊ณผ์ ์ด ๋ฐ๋ณต๋๋ ๊ฒ์ ์ ์ ์๋ค.
๐งโโ๏ธ ๋ถ์ ๊ฒฐ๊ณผ
๋์ผํ ์ฐ์ฐ์ด ๋ฐ๋ณต - ์ฌ๊ท
ํธ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ์ ์ ์์์ง - divide and conquer
๊ตฌํํ
ํธ๋ฆฌ ํํ
- ์ค์ ์ํ์ ์ธ๋ฑ์ค ๋ฒ์๋ก ํํ
- ์์ :
5 6 8 4 3 1 2 7
- left tree : (0, 3)
์ฌ๊ท ํจ์(first, last)
3 6 5 4 8 7 1 2
5 6 8 4 3 1 2 7
- base :
if (first > last)
โreturn
- ์ ์ ์ํ์์ ๋ ธ๋ ํ๋์ฉ ๊ฐ๊ณ ์ด (๋งจ์์์๋ถํฐ)
- ํธ๋ฆฌ์์ ๋ ธ๋์ ์์น ์ฐพ๊ธฐ(์ธ๋ฑ์ค ์ฐพ๊ธฐ)
- ์ธ๋ฑ์ค ๊ธฐ์ค์ผ๋ก ํธ๋ฆฌ๋ฅผ left, right๋ก ๋๋ ํ ์ฌ๊ท
- ์ฌ๊ทํจ์(first, ์ธ๋ฑ์ค -1)
- ์ฌ๊ทํจ์(์ธ๋ฑ์ค +1, last)
- ๋
ธ๋ ์ถ๋ ฅ
์์
(0,7) โ ํธ๋ฆฌ์์ 3์ ์ธ๋ฑ์ค : 4 โ (0,3) , (5,7) โ 3 ์ถ๋ ฅ
์ฝ๋
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int T,N;
int i, j;
int cur;
queue<int> preorder;
vector<int> inorder;
void init();
void printPostorder(int first, int last);
int main()
{
cin >> T;
for(i=0;i<T;i++){
init();
for(j=0;j<N;j++){
cin >> cur;
preorder.push(cur);
}
for(j=0;j<N;j++){
cin >> cur;
inorder.push_back(cur);
}
printPostorder(0,N-1);
cout << "\n";
}
return 0;
}
void init(){
inorder.clear();
cin >>N;
}
void printPostorder(int first, int last){
if(first > last)
return;
//find root index
auto begin = inorder.begin();
auto end = inorder.end();
auto root = preorder.front();
preorder.pop();
int rootIdx = distance(begin, find(begin,end,root));
printPostorder(first,rootIdx-1) ; // left tree
printPostorder(rootIdx+1,last) ; // right tree
cout << root <<" ";
}
๋๋ ์
์ญ์ ์ฌ๊ท์ ๊ดํ ๋ฌธ์ ๋ base์ ์ฌ๊ท๋ถ๋ถ๋ง ์ค์ ์ ์ํ๋ฉด ๊ฐ๋จํ ํด๊ฒฐ๋๋ค๋ ๊ฒ์ ๋๋ ์ ์์๋ค.
์ ๊ทผ๋ ์คํฐ๋์์ ์ฌ๊ท ๋ฌธ์ ๋ฅผ ์ฃผ๋ก ํ์๋๋ ๊ธฐ์กด์ ์ฌ๊ท์ ๋ํด ๊ฐ์ง๊ณ ์๋ ํผ๋์ค๋ฌ์์ด ์ด๋ ์ ๋ ํด๊ฒฐ๋๋ ๊ฒ ๊ฐ์ ๋ฟ๋ฏํ๋ค.
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([๋ฐฑ์ค] #4325 ํธ๋ฆฌ๐ฒ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@c-jeongyyun/4325-ํธ๋ฆฌ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค