반응형
아이디어
post의 가장 오른쪽 원소를 inorder에서 찾아서 나누면서 분할 정복.
C++풀이
#include <bits/stdc++.h>
using namespace std;
int n;
int inorder[100001];
int postorder[100001];
void solve(pair<int,int> idx_in, pair<int,int> idx_post)
{
int post_left = idx_post.first;
int post_right = idx_post.second;
int in_left = idx_in.first;
int in_right = idx_in.second;
cout <<postorder[post_right]<< " ";
if(in_left == in_right || post_left == post_right ) {
return;
}
//인덱스 찾아주기.
int mid_left;
int mid_right;
for(int i=in_left; i<=in_right; i++)
{
if(inorder[i] == postorder[post_right])
{
mid_left = i-1;
mid_right = i+1;
}
}
//left먼저
if(mid_left>=0 && in_left <=mid_left)
solve({in_left,mid_left},{post_left,post_left+(mid_left-in_left)});
//right index넘겨주기
if(mid_right <=n-1 && mid_right <=in_right)
solve({mid_right,in_right},{post_right-(in_right-mid_right+1),post_right-1});
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
//input setting
for(int i = 0 ; i< 2; i++)
{
for(int j= 0; j< n ; j++)
{
int temp;
cin >> temp;
// inorder input
if(i== 0)
{
inorder[j]=temp;
}
// postorder input
else
{
postorder[j] = temp;
}
}
}
solve({0,n-1},{0,n-1});
}
반응형
'Algorithm > Problem Solve' 카테고리의 다른 글
[백준 12852번] 1로 만들기 2(C++ , DP) (0) | 2021.03.17 |
---|---|
[백준 1786번] 찾기 (C++ / KMP ** 어려웠음) (0) | 2021.03.17 |
[백준 11404번] 플로이드(C++) (0) | 2021.03.04 |
[백준 2206번] 벽부수고 이동하기 (C++,BFS 변형) (0) | 2021.02.17 |
[백준 1967번] 트리의 지름 (C++, 다익스트라) - python으로 풀어볼것. (0) | 2021.02.16 |