๊ธฐ๋ก๋ฐฉ

BOJ_5639 : ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_5639 : ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ

Soom_1n 2023. 12. 15. 16:27

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ์˜ ์ „์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋ฅผ ํ† ๋Œ€๋กœ ํ›„์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ์ „์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋ฅผ EOF(End Of File : null)๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
    • ์ฒซ ๋ฒˆ์งธ ๊ฒฐ๊ณผ๋Š” Root ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ดํ›„ ๊ฒฐ๊ณผ๋Š” ์ž‘์œผ๋ฉด ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ, ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋กœ ๊ตฌ๋ถ„ํ•ด ์žฌ๊ท€ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ €์žฅํ•œ๋‹ค.
  • ์ „์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ํ›„์œ„ ์ˆœํšŒ ๋ฐฉ์‹์œผ๋กœ ์žฌํƒ์ƒ‰ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • ์ „์œ„ ์ˆœํšŒ์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ํƒ์ƒ‰ ์ˆœ์„œ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.*;

public class Main {
    private static class Node {
        private final int root;
        private Node left;
        private Node right;

        public Node(int root) {
            this.root = root;
        }

        public int getRoot() {
            return root;
        }

        public Node getLeft() {
            return left;
        }

        public void setLeft(Node left) {
            this.left = left;
        }

        public Node getRight() {
            return right;
        }

        public void setRight(Node right) {
            this.right = right;
        }
    }

    public static void main(String[] args) throws IOException {
        // Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        Node root = new Node(Integer.parseInt(br.readLine()));

        String str = null;

        // Pre Order

        while ((str = br.readLine()) != null) {
            make_tree(root, Integer.parseInt(str));
        }

        // Post Order

        StringBuilder sb = new StringBuilder();

        travel_tree(root, sb);

        // Output
        bw.write(sb.toString());
        bw.flush();
    }

    private static void make_tree(Node node, int num) { // Pre order
        if (node.getRoot() > num) { // left
            if (node.getLeft() == null) {
                node.setLeft(new Node(num));
            } else {
                make_tree(node.getLeft(), num);
            }
        } else { // right
            if (node.getRight() == null) {
                node.setRight(new Node(num));
            } else {
                make_tree(node.getRight(), num);
            }
        }
    }

    private static void travel_tree(Node node, StringBuilder sb) { // Post order
        // left
        if (node.getLeft() != null) {
            travel_tree(node.getLeft(), sb);
        }

        // right
        if (node.getRight() != null) {
            travel_tree(node.getRight(), sb);
        }

        // root
        sb.append(node.getRoot()).append('\n');
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Node ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ–ˆ๋‹ค.
    • ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’์ธ intํ˜• ๋ณ€์ˆ˜ root์™€ ์™ผ์ชฝ ์ž์‹, ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ์ €์žฅํ•  Node ๊ฐ์ฒด left, right๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
    • getter, setter๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์•˜๋‹ค.
  • ์ „์œ„ ์ˆœํšŒ ๊ฒฐ๊ณผ๋ฅผ ํ† ๋Œ€๋กœ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • ์ฒซ ๊ฒฐ๊ณผ ๊ฐ’์€ Node ๊ฐ์ฒด root๋กœ ์ €์žฅํ•ด ํƒ์ƒ‰์„ ์‹œ์ž‘ ํ•  ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉํ•œ๋‹ค.
    • ๋‹ค์Œ ๊ฒฐ๊ณผ ๊ฐ’ ๋ถ€ํ„ฐ๋Š” make_tree() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด Node์˜ root ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด left, ํฌ๋ฉด right๋กœ ์ €์žฅํ•œ๋‹ค.
    • left, right ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ ๋˜์ง€ ์•Š์€ null์ด๋ผ๋ฉด ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•˜๊ณ  ํ•ด๋‹น Node ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์ €์žฅํ•œ๋‹ค.
  • ํ›„์œ„ ์ˆœํšŒ๋Š” ์‹œ์ž‘ root ๋…ธ๋“œ๋ถ€ํ„ฐ left, right, root๊ฐ’ ์ˆœ์œผ๋กœ ํƒ์ƒ‰ํ•ด StringBuilder์— ์ €์žฅํ•œ๋‹ค.
    • travel_tree() ๋ฉ”์„œ๋“œ์˜ ์žฌ๊ท€ ๋ฐฉ์‹์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.
  • ์ตœ์ข… ํƒ์ƒ‰ ๊ฒฐ๊ณผ์ธ StringBuilder๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์˜ค๋žœ๋งŒ์— ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฑ์ค€ ์ฝ”ํ…Œ ํ’€์ด์ธ๋ฐ ๊ณจ๋“œ๋งŒ ํ’€ ๊ณ„ํš์ด๊ณ , ์ŠคํŠธ๋ฆญ์„ ์ด์–ด๋‚˜๊ฐ€ ๋ณผ ์ƒ๊ฐ์ด๋‹ค.
    • Solved.ac์˜ Class ๋ฌธ์ œ๋„ ํ’€๋ฉด์„œ, ์ฝ”ํ…Œ ๊ต์žฌ ๋ฌธ์ œ๋„ ๋”ฐ๋ผ ํ’€ ์ƒ๊ฐ์ด๊ณ , ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งˆ๋‹ค ๋Œ€ํ‘œ ๋ฌธ์ œ๋“ค์„ ์„ ์ •ํ•ด๋†”์„œ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋ฐ˜๋ณต์œผ๋กœ ํ‘ธ๋Š” ์—ฐ์Šต๋„ ํ•ด๋ณผ ์ƒ๊ฐ์ด๋‹ค.
  • ์œ„ ๋ฌธ์ œ๋Š” Node ํด๋ž˜์Šค์™€ ์žฌ๊ท€ ๋ฉ”์„œ๋“œ๋งŒ ๊ตฌํ˜„ํ•  ์ค„ ์•Œ๋ฉด ๊ฐ„๋‹จํžˆ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

728x90