b2263. ํŠธ๋ฆฌ์˜ ์ˆœํšŒ

2025. 4. 28. 16:23ยทAlgorithm & Data Structures/BOJ

 

https://www.acmicpc.net/problem/2263

 

 

 

๐Ÿ“Œ ์ž๋ฐ”(Java)๋กœ ํ‘ธ๋Š” ํŠธ๋ฆฌ์˜ ์ˆœํšŒ - ๋ฐฑ์ค€ 2263 ๐ŸŒฒ

 

Inorder + Postorder → Preorder ๋ณต์›ํ•˜๊ธฐ

 

๐Ÿ”Ž ๋ฌธ์ œ ๊ฐœ์š”

 

๋ฐฑ์ค€ 2263 - ํŠธ๋ฆฌ์˜ ์ˆœํšŒ ๋ฌธ์ œ๋Š”,

 

  • ์ด์ง„ ํŠธ๋ฆฌ์˜ Inorder(์ค‘์œ„ ์ˆœํšŒ) ์™€ Postorder(ํ›„์œ„ ์ˆœํšŒ) ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ,
  • ์ด์ง„ ํŠธ๋ฆฌ์˜ Preorder(์ „์œ„ ์ˆœํšŒ) ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์ œ ์ž…๋ ฅ

3
2 1 3
2 3 1

 

๐Ÿ’ก ์˜ˆ์ œ ์ถœ๋ ฅ

1 2 3

 

 


๐Ÿ›  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ‘๊ทผ ๋ฐฉ์‹

 

์ด ๋ฌธ์ œ๋Š” ํŠธ๋ฆฌ๋ฅผ ์ง์ ‘ ๋ณต์›ํ•˜์ง€ ์•Š๊ณ ,

โœ” ์ˆœํšŒ ๊ฒฐ๊ณผ๋งŒ์„ ์ด์šฉํ•ด ๋ฐ”๋กœ Preorder๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

 


๐Ÿ“Œ ํŠธ๋ฆฌ ์ˆœํšŒ์˜ ํŠน์ง• ์ดํ•ดํ•˜๊ธฐ

์ˆœํšŒ ๋ฐฉ๋ฒ•์ˆœ์„œ
Preorder(์ „์œ„ ์ˆœํšŒ) ๋ฃจํŠธ → ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ
Inorder(์ค‘์œ„ ์ˆœํšŒ) ์™ผ์ชฝ → ๋ฃจํŠธ → ์˜ค๋ฅธ์ชฝ
Postorder(ํ›„์œ„ ์ˆœํšŒ) ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ → ๋ฃจํŠธ

 

๐Ÿ“Œ ํ•ต์‹ฌ ์•„์ด๋””์–ด

 

  • Postorder์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ํ˜„์žฌ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋‹ค.
  • ๊ทธ ๋ฃจํŠธ๋ฅผ Inorder์—์„œ ์ฐพ์œผ๋ฉด,
    • ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์™€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋ฒ”์œ„๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
  • Preorder์—์„œ๋Š” ๋ฃจํŠธ → ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ“Œ Java ์ฝ”๋“œ ์„ค๋ช…

 

1. ์ž…๋ ฅ ๋ฐ ์ดˆ๊ธฐํ™”

N = Integer.parseInt(br.readLine());
inOrder = new int[N+1];
postOrder = new int[N+1];

StringTokenizer st1 = new StringTokenizer(br.readLine());
StringTokenizer st2 = new StringTokenizer(br.readLine());

โœ” inOrder, postOrder๋ฅผ ๊ฐ๊ฐ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.

 

โœ” index ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์„œ inOrder ๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ์ค€๋น„ํ•œ๋‹ค.

index = new int[N+1];
for (int i = 1; i <= N; i++) {
    index[inOrder[i]] = i;
}

 

 

 

2. ํ•ต์‹ฌ ์žฌ๊ท€ ํ•จ์ˆ˜ 

solve()

static void solve(int is, int ie, int ps, int pe) {
    if (ie < is || pe < ps) return;
    
    int root = postOrder[pe]; // ํ›„์œ„ ์ˆœํšŒ ๋๊ฐ’ = ํ˜„์žฌ ์„œ๋ธŒํŠธ๋ฆฌ ๋ฃจํŠธ
    int rIdx = index[root];   // ์ค‘์œ„ ์ˆœํšŒ์—์„œ ๋ฃจํŠธ ์œ„์น˜ ์ฐพ๊ธฐ
    sb.append(root + " ");    // ์ „์œ„ ์ˆœํšŒ๋Š” ๋ฃจํŠธ๋ฅผ ๋จผ์ € ์ถœ๋ ฅ

    int len = rIdx - is; // ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๊ธธ์ด ๊ณ„์‚ฐ

    // ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์žฌ๊ท€
    solve(is, rIdx - 1, ps, ps + len - 1);

    // ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์žฌ๊ท€
    solve(rIdx + 1, ie, ps + len, pe - 1);
}

โœ” is, ie: ํ˜„์žฌ Inorder ๋ฒ”์œ„

โœ” ps, pe: ํ˜„์žฌ Postorder ๋ฒ”์œ„

 

โœ” ๋ฃจํŠธ๋ฅผ ๋จผ์ € ์ฐ๊ณ  (Preorder)

โœ” ์™ผ์ชฝ ํŠธ๋ฆฌ → ์˜ค๋ฅธ์ชฝ ํŠธ๋ฆฌ ์ˆœ์„œ๋กœ ์žฌ๊ท€ ํ˜ธ์ถœํ•œ๋‹ค.

 

 

3. ์ถœ๋ ฅ

System.out.println(sb);

โœ” ๊ฒฐ๊ณผ๋Š” StringBuilder๋กœ ์ €์žฅํ•ด์„œ ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•œ๋‹ค.

 


โœ… ์ •๋ฆฌ

ํ•ต์‹ฌ ํฌ์ธํŠธ ์„ค๋ช…
Postorder ๋งˆ์ง€๋ง‰ ์›์†Œ → ํ˜„์žฌ ์„œ๋ธŒํŠธ๋ฆฌ ๋ฃจํŠธ ๋ฃจํŠธ ๊ธฐ์ค€์œผ๋กœ Inorder๋ฅผ ๋‚˜๋ˆ ์•ผ ํ•จ
Inorder์—์„œ ๋ฃจํŠธ ์œ„์น˜๋ฅผ ์ฐพ๊ณ  ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋ฒ”์œ„๋ฅผ ๊ณ„์‚ฐ
Preorder๋Š” ๋ฃจํŠธ๋ฅผ ๋จผ์ € ์ถœ๋ ฅ ๊ทธ๋‹ค์Œ ์™ผ์ชฝ → ์˜ค๋ฅธ์ชฝ ์ˆœ์„œ ์žฌ๊ท€

 


๐Ÿ”ฅ ์ฝ”๋“œ ์ „์ฒด (์ •๋ฆฌ)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class b2263 {
    static int N;
    static int[] inOrder, postOrder, index;
    static StringBuilder sb;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        N = Integer.parseInt(br.readLine());
        inOrder = new int[N+1];
        postOrder = new int[N+1];

        StringTokenizer st1 = new StringTokenizer(br.readLine());
        StringTokenizer st2 = new StringTokenizer(br.readLine());

        for (int i = 1; i <= N; i++) {
            inOrder[i] = Integer.parseInt(st1.nextToken());
        }
        for (int i = 1; i <= N; i++) {
            postOrder[i] = Integer.parseInt(st2.nextToken());
        }

        index = new int[N+1];
        for (int i = 1; i <= N; i++) {
            index[inOrder[i]] = i;
        }

        sb = new StringBuilder();
        solve(1, N, 1, N);
        System.out.println(sb);
    }

    static void solve(int is, int ie, int ps, int pe) {
        if (ie < is || pe < ps) return;
        
        int root = postOrder[pe];
        int rIdx = index[root];
        sb.append(root).append(" ");

        int len = rIdx - is;
        solve(is, rIdx - 1, ps, ps + len - 1);
        solve(rIdx + 1, ie, ps + len, pe - 1);
    }
}

 

 

 

 

'Algorithm & Data Structures > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

b1717. ์ง‘ํ•ฉ์˜ ํ‘œํ˜„  (0) 2025.05.06
b4803. ํŠธ๋ฆฌ  (0) 2025.04.28
b11780. ํ”Œ๋กœ์ด๋“œ 2  (0) 2025.04.25
b13913. ์ˆœ๊ฐ„์ด๋™ 4  (0) 2025.04.22
b2618. ๊ฒฝ์ฐฐ์ฐจ  (0) 2025.04.18
'Algorithm & Data Structures/BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • b1717. ์ง‘ํ•ฉ์˜ ํ‘œํ˜„
  • b4803. ํŠธ๋ฆฌ
  • b11780. ํ”Œ๋กœ์ด๋“œ 2
  • b13913. ์ˆœ๊ฐ„์ด๋™ 4
Geisha
Geisha
๊ฐœ๋ฐœ ์ผ๊ธฐ
  • Geisha
    Geisha
    Geisha
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (304) N
      • Algorithm & Data Structures (230) N
        • BOJ (89) N
        • SWEA (1)
        • Programers (136)
        • Data Structures (3)
      • DB (21) N
        • SQL (15) N
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • ์šด์˜์ฒด์ œ (13)
        • ๋„คํŠธ์›Œํฌ (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋ฐฑ์ค€
    Union-Find
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    baekjoon
    BFS
    ์ด์ง„ํƒ์ƒ‰
    programmers
    dfs
    ํˆฌํฌ์ธํ„ฐ
    ๋™์ ๊ณ„ํš๋ฒ•
    ๋‹ค์ต์ŠคํŠธ๋ผ
    Java
    ์œ ๋‹ˆ์˜จํŒŒ์ธ๋“œ
    Dijkstra
    PriorityQueue
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋ฐฑํŠธ๋ž˜ํ‚น
    DynamicProgramming
    ์ด๋ถ„ํƒ์ƒ‰
    unionfind
    ์Šคํƒ
    ๊ฒฝ๋กœ์••์ถ•
    ์ „์œ„์ˆœํšŒ
    ํ›„์œ„์ˆœํšŒ
    ์œ„์ƒ์ •๋ ฌ
    binarySearch
    ๊ตฌํ˜„
    algorithm
    Stack
    dp
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Geisha
b2263. ํŠธ๋ฆฌ์˜ ์ˆœํšŒ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”