๐Ÿ’ก Algorithm

[Java] ํŠธ๋ฆฌ ์ˆœํšŒ (Lv. Sliver1)

jcowwk 2025. 2. 20. 10:34

ํŠธ๋ฆฌ ์ˆœํšŒ (Lv. Sliver1)


1. ๋ฌธ์ œ

2. ํ’€์ด


1. ๋ฌธ์ œ

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

 

2. ํ’€์ด

import java.io.*;
import java.util.*;

public class Main {
    static int[][] tree;
    static StringBuilder sb = new StringBuilder();

    public static void preOrder(int start) {
        if (start != -18) {
            sb.append((char) (start + 'A' - 1));
            preOrder(tree[start][0]);
            preOrder(tree[start][1]);
        }
    }

    public static void inOrder(int start) {
        if (start != -18) {
            inOrder(tree[start][0]);
            sb.append((char) (start + 'A' - 1));
            inOrder(tree[start][1]);
        }
    }

    public static void postOrder(int start) {
        if (start != -18) {
            postOrder(tree[start][0]);
            postOrder(tree[start][1]);
            sb.append((char) (start + 'A' - 1));
        }
    }

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

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            char a = st.nextToken().charAt(0);
            char b = st.nextToken().charAt(0);
            char c = st.nextToken().charAt(0);

            int parent = a - 'A' + 1;
            int left = (b == '.') ? -18 : b - 'A' + 1;
            int right = (c == '.') ? -18 : c - 'A' + 1;

            tree[parent][0] = left;
            tree[parent][1] = right;
        }

        preOrder(1);
        sb.append("\n");
        inOrder(1);
        sb.append("\n");
        postOrder(1);
        sb.append("\n");

        System.out.print(sb.toString());
    }
}

 

- 'A' + 1 ์ฝ”๋“œ๋Š” A~Z๋ฅผ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. tree[parent][0] = left; ์— i๋ฒˆ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์ž์‹, tree[parent][1] = right; ์— i๋ฒˆ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

 

if (start != -18) {
    sb.append((char) (start + 'A' - 1));
    preOrder(tree[start][0]);
    preOrder(tree[start][1]);
}

 

sb.append((char) (start + 'A' - 1)); ๋ฅผ ํ†ตํ•ด ๋ฃจํŠธ๋ฅผ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค. preOrder(tree[start][0]); ์—์„œ start ์•ˆ์— ๋ฃจํŠธ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ  ํŠธ๋ฆฌ์˜ ์™ผ์ชฝ ์ž์‹๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  if (start != -18) ์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด ๋ฃจํŠธ๊ฐ’์ด ์—†์„ ๋•Œ๊นŒ์ง€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ฃจํŠธ๊ฐ’์„ ๊ฐ€์žฅ ๋จผ์ € ์ •ํ•˜๋ฉด ์ „์œ„์ˆœํšŒ, ๋ฃจํŠธ๊ฐ’์„ ์ค‘๊ฐ„์— ์ •ํ•˜๋ฉด ์ค‘์œ„์ˆœํšŒ, ๋ฃจํŠธ๊ฐ’์„ ๋งˆ์ง€๋ง‰์— ์ •ํ•˜๋ฉด ํ›„์œ„์ˆœํšŒ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” !

ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค <3