우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»‍πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀

Eager To Learn 🌌

πŸ‘¨πŸ»‍πŸ’» PS/바킹독

[JAVA] λ°±μ€€ 22856번 【G4.트리 μˆœνšŒγ€‘

2023. 9. 25. 13:33

문제

 

22856번: 트리 순회

λ…Έλ“œκ°€ $N$개인 이진 νŠΈλ¦¬κ°€ μžˆλ‹€. 트리λ₯Ό μ€‘μœ„ μˆœνšŒμ™€ μœ μ‚¬ν•˜κ²Œ μˆœνšŒν•˜λ €κ³  ν•œλ‹€. 이λ₯Ό μœ μ‚¬ μ€‘μœ„ 순회라고 ν•˜μž. 순회의 μ‹œμž‘μ€ 트리의 루트이고 순회의 끝은 μ€‘μœ„ μˆœνšŒν•  λ•Œ λ§ˆμ§€λ§‰ λ…Έλ“œμ΄λ‹€.

www.acmicpc.net

 

풀이

1️⃣ 트리 클래슀λ₯Ό μ •μ˜ν•œ 풀이

πŸ’‘ λ– μ˜€λ₯Έ Idea

μ²˜μŒμ—λŠ” 이 λ¬Έμ œμ—μ„œ μ •μ˜ν•œ μœ μ‚¬ μ€‘μœ„ 순회λ₯Ό λ˜‘κ°™μ΄ κ΅¬ν˜„ν•΄μ•Όν•˜λ‚˜ κ³ λ―Όν–ˆμ—ˆμ§€λ§Œ, κ·ΈλŸ¬μ§€ μ•Šκ³  μ‰½κ²Œ ν•΄κ²°ν•  수 μžˆμ—ˆλ‹€.


이 μœ μ‚¬ μ€‘μœ„ 순회의 νŠΉμ§•μ€ νŠΈλ¦¬μ—μ„œ 제일 였λ₯Έμͺ½ 간선은 ν•œλ²ˆλ§Œ μ§€λ‚˜κ°€κ²Œ λœλ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

λ”°λΌμ„œ, κ°€μž₯ 였λ₯Έμͺ½ μžμ‹λ§Œ μ§€λ‚˜κ°€κ²Œλ” ν•˜λŠ” 순회λ₯Ό μ •μ˜ν•˜μ—¬ λ…Έλ“œμ˜ 개수λ₯Ό κ΅¬ν–ˆκ³ 

κ°„μ„ μ˜ κ°œμˆ˜λŠ” λ…Έλ“œμ˜ 개수 -1 μž„μ„ μ΄μš©ν•˜μ—¬ νŽΈλ„ κ°„μ„ μ˜ 개수λ₯Ό ꡬ할 수 μžˆμ—ˆλ‹€.

그리고 (전체 λ…Έλ“œμ˜ 개수 -1)*2 ν•œ 값은 전체 간선을 왕볡 κ°„μ„ μœΌλ‘œ κ°„μ£Όν–ˆμ„λ•Œ κ°œμˆ˜μ΄λ―€λ‘œ

전체 간선을 μ™•λ³΅μœΌλ‘œ μƒκ°ν•œ κ°œμˆ˜μ— νŽΈλ„ κ°„μ„ μ˜ 개수λ₯Ό 차감해주면 닡이 λ‚˜μ˜¨λ‹€.

 

public class Main {
    static int oneWay;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        TreeNode[] nodes = new TreeNode[N + 1];
        for (int i = 0; i < N; i++) {
            String[] input = br.readLine().split(" ");
            int parent = Integer.parseInt(input[0]);
            int left = Integer.parseInt(input[1]);
            TreeNode leftNode = getNode(nodes, left);
            int right = Integer.parseInt(input[2]);
            TreeNode rightNode = getNode(nodes, right);

            TreeNode parentNode = getNode(nodes, parent);
            parentNode.left = leftNode;
            parentNode.right = rightNode;
        }

        order(nodes[1]);
        System.out.println((N - 1) * 2 - (oneWay - 1));
    }

    private static void order(TreeNode node) {
        if (node == null) {
            return;
        }
        oneWay++;
        order(node.right);

    }

    private static TreeNode getNode(TreeNode[] nodes, int idx) {
        TreeNode node;

        if (idx == -1) {
            return null;
        }

        if (nodes[idx] == null) {
            node = new TreeNode(idx);
            nodes[idx] = node;
        } else {
            node = nodes[idx];
        }
        return node;
    }


    static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;


        public TreeNode(int val) {
            this.val = val;
            this.left = null;
            this.right = null;
        }
    }
}

 

κ²°κ³Ό

    'πŸ‘¨πŸ»‍πŸ’» PS/바킹독' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [JAVA] λ°±μ€€ 2250번 【G2.트리의 높이와 λ„ˆλΉ„γ€‘
    • [JAVA] λ°±μ€€ 20955번 【G4.λ―Όμ„œμ˜ 응급 μˆ˜μˆ γ€‘
    • [JAVA] λ°±μ€€ 5214번 【G2.ν™˜μŠΉγ€‘
    • [JAVA] λ°±μ€€ 1043번 【G4.거짓말】
    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”