diff --git "a/weekly/week13/PGS_ 42892_\352\270\270\354\260\276\352\270\260\352\262\214\354\236\204/Hexeong.java" "b/weekly/week13/PGS_ 42892_\352\270\270\354\260\276\352\270\260\352\262\214\354\236\204/Hexeong.java" new file mode 100644 index 0000000..d1f515e --- /dev/null +++ "b/weekly/week13/PGS_ 42892_\352\270\270\354\260\276\352\270\260\352\262\214\354\236\204/Hexeong.java" @@ -0,0 +1,70 @@ +import java.util.*; + +class Solution { + int[][] answer; + int idx; + + public int[][] solution(int[][] nodeinfo) { + int n = nodeinfo.length; + List nodes = new ArrayList<>(); + + for (int i = 0; i < n; i++) { + nodes.add(new Node(i + 1, nodeinfo[i][0], nodeinfo[i][1])); + } + + nodes.sort((a, b) -> { + if (a.y == b.y) return a.x - b.x; + return b.y - a.y; + }); + + Node root = nodes.get(0); + for (int i = 1; i < nodes.size(); i++) { + insertNode(root, nodes.get(i)); + } + + answer = new int[2][n]; + idx = 0; + preOrder(root); + idx = 0; + postOrder(root); + + return answer; + } + + private void insertNode(Node parent, Node child) { + if (child.x < parent.x) { + if (parent.left == null) parent.left = child; + else insertNode(parent.left, child); + } else { + if (parent.right == null) parent.right = child; + else insertNode(parent.right, child); + } + } + + // 전위 순회 + private void preOrder(Node node) { + if (node == null) return; + answer[0][idx++] = node.id; + preOrder(node.left); + preOrder(node.right); + } + + // 후위 순회 + private void postOrder(Node node) { + if (node == null) return; + postOrder(node.left); + postOrder(node.right); + answer[1][idx++] = node.id; + } + + class Node { + int id, x, y; + Node left, right; + + public Node(int id, int x, int y) { + this.id = id; + this.x = x; + this.y = y; + } + } +}