From f63ad48bfbdfbb363bb203931ca4407035bbf561 Mon Sep 17 00:00:00 2001 From: Tessa1217 Date: Mon, 9 Jun 2025 19:41:48 +0900 Subject: [PATCH 1/5] add missing number solution --- missing-number/Tessa1217.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 missing-number/Tessa1217.java diff --git a/missing-number/Tessa1217.java b/missing-number/Tessa1217.java new file mode 100644 index 000000000..5b4129848 --- /dev/null +++ b/missing-number/Tessa1217.java @@ -0,0 +1,24 @@ +/** + * 0 ~ n까지 고유한 숫자들로 이루어진 배열 nums가 주어질 때 해당 범위 내에서 없어진 숫자를 찾으세요. + */ +class Solution { + + // 시간복잡도: O(n), 공간복잡도: O(n) + public int missingNumber(int[] nums) { + + boolean[] visitNum = new boolean[nums.length + 1]; + + for (int i = 0; i < nums.length; i++) { + visitNum[nums[i]] = true; + } + + for (int i = 0; i < visitNum.length; i++) { + if (!visitNum[i]) { + return i; + } + } + + return 0; + } +} + From 526270866f3c0779008c70c3ad91a86d35e833ca Mon Sep 17 00:00:00 2001 From: Tessa1217 <96612755+Tessa1217@users.noreply.github.com> Date: Fri, 13 Jun 2025 12:51:32 +0900 Subject: [PATCH 2/5] add binary tree maximum path sum --- binary-tree-maximum-path-sum/Tessa1217.java | 42 +++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 binary-tree-maximum-path-sum/Tessa1217.java diff --git a/binary-tree-maximum-path-sum/Tessa1217.java b/binary-tree-maximum-path-sum/Tessa1217.java new file mode 100644 index 000000000..deb6de128 --- /dev/null +++ b/binary-tree-maximum-path-sum/Tessa1217.java @@ -0,0 +1,42 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } + * } + */ +class Solution { + + // 최대 Path 누적 합 + int maxPathSumVal = Integer.MIN_VALUE; + + // 시간복잡도: O(n), 공간복잡도: O(h) h as height of tree + public int maxPathSum(TreeNode root) { + maxPathSumChecker(root); + return maxPathSumVal; + } + + // 재귀 + private int maxPathSumChecker(TreeNode node) { + + if (node == null) { + return 0; + } + + int leftMax = Math.max(maxPathSumChecker(node.left), 0); + int rightMax = Math.max(maxPathSumChecker(node.right), 0); + + maxPathSumVal = Math.max(node.val + leftMax + rightMax, maxPathSumVal); + + return node.val + Math.max(leftMax, rightMax); + } +} + From 3948a06d47c705685a7b83350fb6a8f802d248b1 Mon Sep 17 00:00:00 2001 From: Tessa1217 <96612755+Tessa1217@users.noreply.github.com> Date: Fri, 13 Jun 2025 12:53:33 +0900 Subject: [PATCH 3/5] add merge intervals solution --- merge-intervals/Tessa1217.java | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 merge-intervals/Tessa1217.java diff --git a/merge-intervals/Tessa1217.java b/merge-intervals/Tessa1217.java new file mode 100644 index 000000000..2ca296cdc --- /dev/null +++ b/merge-intervals/Tessa1217.java @@ -0,0 +1,37 @@ +class Solution { + public int[][] merge(int[][] intervals) { + + if (intervals.length <= 1) { + return intervals; + } + + List answer = new ArrayList<>(); + + Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0])); + + int start = intervals[0][0]; + int end = intervals[0][1]; + + for (int i = 1; i < intervals.length; i++) { + + // 현재 인터벌 시작점 + int currStart = intervals[i][0]; + // 현재 인터벌 끝점 + int currEnd = intervals[i][1]; + + if (end >= currStart) { + end = Math.max(end, currEnd); + } else { + answer.add(new int[]{start, end}); + start = currStart; + end = currEnd; + } + } + + answer.add(new int[]{start, end}); + + return answer.stream() + .toArray(int[][]::new); + } +} + From 727fb27542164a13cf96eea4cd7632621a88d6e1 Mon Sep 17 00:00:00 2001 From: Tessa1217 <96612755+Tessa1217@users.noreply.github.com> Date: Fri, 13 Jun 2025 13:12:33 +0900 Subject: [PATCH 4/5] add graph valid tree solution --- graph-valid-tree/Tessa1217.java | 57 +++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 graph-valid-tree/Tessa1217.java diff --git a/graph-valid-tree/Tessa1217.java b/graph-valid-tree/Tessa1217.java new file mode 100644 index 000000000..bd7b11907 --- /dev/null +++ b/graph-valid-tree/Tessa1217.java @@ -0,0 +1,57 @@ +public class Solution { + /** + * @param n: An integer + * @param edges: a list of undirected edges + * @return: true if it's a valid tree, or false + */ + // 시간 복잡도: O(n), 공간복잡도: O(n) + public boolean validTree(int n, int[][] edges) { + + if (edges.length != (n - 1)) { + return false; + } + + List[] graph = new ArrayList[n]; + for (int i = 0; i < n; i++) { + graph[i] = new ArrayList<>(); + } + + for (int[] edge : edges) { + graph[edge[0]].add(edge[1]); + graph[edge[1]].add(edge[0]); + } + + boolean[] visited = new boolean[n]; + + if (!dfs(0, -1, visited, graph)) { + return false; + } + + for (boolean v : visited) { + if (!v) { + return false; // Not fully connected + } + } + + return true; + } + + private boolean dfs(int node, int parent, boolean[] visited, List[] graph) { + if (visited[node]) { + return false; // Found a cycle + } + + visited[node] = true; + + for (int neighbor : graph[node]) { + if (neighbor != parent) { + if (!dfs(neighbor, node, visited, graph)) { + return false; + } + } + } + + return true; + } +} + From d3ef7fddda311c52772552a351013c8aaba4c28f Mon Sep 17 00:00:00 2001 From: Tessa1217 Date: Fri, 13 Jun 2025 20:24:28 +0900 Subject: [PATCH 5/5] add reorder list solution --- reorder-list/Tessa1217.java | 59 +++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 reorder-list/Tessa1217.java diff --git a/reorder-list/Tessa1217.java b/reorder-list/Tessa1217.java new file mode 100644 index 000000000..d3ec9c7ed --- /dev/null +++ b/reorder-list/Tessa1217.java @@ -0,0 +1,59 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + // 시간복잡도: O(n), 공간복잡도: O(1) + public void reorderList(ListNode head) { + + // Slow, Fast Pointer + // 1 - 2 - 3 - 4 - 5 + ListNode slow = head; + ListNode fast = head; + + // fast가 끝까지 닿을 때 중점 찾기 + // slow = 3 + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + } + + + // 중간 이후부터 끝까지 (second half of list) => reverse order + // 3 이후부터 -> 4 - 5 + // reverse - 5 - 4 + ListNode backHead = null; // second half of list's new head + ListNode backSide = slow.next; + slow.next = null; + + while (backSide != null) { + ListNode temp = backSide.next; + backSide.next = backHead; + backHead = backSide; + backSide = temp; + } + + // Merge first and second half + + // 1 - 2 - 3 + ListNode firstHalf = head; + // 5 - 4 + ListNode secondHalf = backHead; + + // 1 - 5 - 2 - 4 - 3 + while (secondHalf != null) { + ListNode temp = firstHalf.next; + firstHalf.next = secondHalf; + firstHalf = secondHalf; + secondHalf = temp; + } + } +} + +