๋ฐ์ํ
[BOJ] 2263 ํธ๋ฆฌ์ ์ํ
https://www.acmicpc.net/problem/2263
๋ฌธ์ ์ ๊ทผ
์ธ์ค๋์ ํฌ์คํธ์ค๋ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋ ํ๋ฆฌ์ค๋ ์ํ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
ํฌ์คํธ์ค๋์์๋ ํธ๋ฆฌ์ ์๋ธํธ๋ฆฌ์ ๋ฃจํธ๋ฅผ ๊ตฌํ ์ ์๊ณ , ์ธ์ค๋์์๋ ํฌ์คํธ์ค๋์์ ๊ตฌํ ๋ฃจํธ๋ฅผ ์ด์ฉํ์ฌ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์๋ค. ์ด๋ฅผ ์ด์ฉํด์ ํ๋ฆฌ์ค๋ ์ํ๋ฅผ ๊ตฌํ์๋ค.
Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ2263 {
static int n,idx = 0;
static int[] inorder, preorder, postorder;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
String[] input = br.readLine().split(" ");
inorder = new int[n];
postorder = new int[n];
preorder = new int[n];
// ์
๋ ฅ ๋ฐ๊ธฐ
for(int i=0; i<n; i++){
inorder[i] = Integer.parseInt(input[i]);
}
input = br.readLine().split(" ");
for(int i=0; i<n; i++){
postorder[i] = Integer.parseInt(input[i]);
}
getPreorder(0,n-1,0,n-1);
for(int num : preorder){
System.out.print(num+" ");
}
}
/**
* postorder[pe]๊ฐ ์๋ธ ํธ๋ฆฌ์ ๋ฃจํธ์ด๊ณ , inorder๋ ์ด ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ์์๊ณผ ์ค๋ฅธ์ชฝ ์์์ ๊ตฌํ ์ ์๋ค.
* ํธ๋ฆฌ๋ฅผ ๋ฃจํธ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ก ๋
ธ๋๊ฐ 1๊ฐ์ผ ๋๊น์ง ์ชผ๊ฐ ๋ค.
* @param is inorder ์์ ์ธ๋ฑ์ค
* @param ie inorder ๋ ์ธ๋ฑ์ค
* @param ps postorder ์์ ์ธ๋ฑ์ค
* @param pe postorder ๋ ์ธ๋ฑ์ค
*/
public static void getPreorder(int is, int ie, int ps, int pe){
if(is <= ie && ps <= pe){
preorder[idx++] = postorder[pe];
int pivot = is;
for(int i = is; i<=ie; i++){
if(inorder[i] == postorder[pe]){
pivot = i;
break;
}
}
// pivot - is == ์๋ธํธ๋ฆฌ์ ๋
ธ๋ ๊ฐ์
// ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ
getPreorder(is,pivot-1,ps, ps + pivot - is -1);
// ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ
getPreorder(pivot+1,ie,ps + pivot - is,pe-1);
}
}
}
์ด๋ ค์ ๋ ์ / ๋ฐฐ์ด ์ / ๋๋ ์
ํธ๋ฆฌ ์ํ๋ฌธ์ ๋ ํ์ด๋ดค์ง๋ง ์ธ์ค๋์ ํฌ์คํธ์ค๋ ํ๋ฆฌ์ค๋์ ๊ด๊ณ์๋ํด์๋ ์๊ฐํด๋ณธ์ ์ด ์์๋๋ฐ ์ ๊ธฐํ๊ณ ์ด๋ ค์ด ๋ฌธ์ ์๋ค
๋ฐ์ํ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ๋จ์ฒด์ฌ์ง ์ฐ๊ธฐ (0) | 2022.05.01 |
---|---|
[Algortihm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ์คํ์ฑํ ๋ฐฉ (0) | 2022.04.12 |
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ๋ฌธ์์ด ์์ถ (0) | 2022.04.10 |
[Algorithm/Java][๋ฐฑ์ค] 1918 ํ์ ํ๊ธฐ์ (0) | 2022.04.08 |
[Algorithm/Java][๋ฐฑ์ค] 1865 ์ํ (0) | 2022.04.07 |