From 5f0a5ac7f605fe850ac10f815c531f4dd7c0ef2b Mon Sep 17 00:00:00 2001 From: JAEKWANG97 Date: Sat, 18 Jul 2026 13:30:26 +0900 Subject: [PATCH 1/3] Add week 04 solutions for merge, max depth, find min --- .../jaekwang97.java | 18 +++++++++++ maximum-depth-of-binary-tree/jaekwang97.java | 25 +++++++++++++++ merge-two-sorted-lists/jaekwang97.java | 32 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 find-minimum-in-rotated-sorted-array/jaekwang97.java create mode 100644 maximum-depth-of-binary-tree/jaekwang97.java create mode 100644 merge-two-sorted-lists/jaekwang97.java diff --git a/find-minimum-in-rotated-sorted-array/jaekwang97.java b/find-minimum-in-rotated-sorted-array/jaekwang97.java new file mode 100644 index 0000000000..1533b45b00 --- /dev/null +++ b/find-minimum-in-rotated-sorted-array/jaekwang97.java @@ -0,0 +1,18 @@ +class Solution { + public int findMin(int[] nums) { + int left = 0; + int right = nums.length - 1; + + while (left < right) { + int mid = left + (right - left) / 2; + + if (nums[mid] > nums[right]) { + left = mid + 1; + } else { + right = mid; + } + } + + return nums[left]; + } +} diff --git a/maximum-depth-of-binary-tree/jaekwang97.java b/maximum-depth-of-binary-tree/jaekwang97.java new file mode 100644 index 0000000000..25c1109520 --- /dev/null +++ b/maximum-depth-of-binary-tree/jaekwang97.java @@ -0,0 +1,25 @@ +class Solution { + private int max; + + public int maxDepth(TreeNode root) { + if (root == null) { + return 0; + } + + max = 0; + dfs(root, 1); + + return max; + } + + private void dfs(TreeNode node, int depth) { + if (node == null) { + return; + } + + max = Math.max(max, depth); + + dfs(node.left, depth + 1); + dfs(node.right, depth + 1); + } +} diff --git a/merge-two-sorted-lists/jaekwang97.java b/merge-two-sorted-lists/jaekwang97.java new file mode 100644 index 0000000000..9d4af018ca --- /dev/null +++ b/merge-two-sorted-lists/jaekwang97.java @@ -0,0 +1,32 @@ +class Solution { + public ListNode mergeTwoLists(ListNode list1, ListNode list2) { + ListNode dummy = new ListNode(); + ListNode tail = dummy; + + while (list1 != null && list2 != null) { + if (list1.val <= list2.val) { + tail.next = new ListNode(list1.val); + list1 = list1.next; + } else { + tail.next = new ListNode(list2.val); + list2 = list2.next; + } + + tail = tail.next; + } + + while (list1 != null) { + tail.next = new ListNode(list1.val); + tail = tail.next; + list1 = list1.next; + } + + while (list2 != null) { + tail.next = new ListNode(list2.val); + tail = tail.next; + list2 = list2.next; + } + + return dummy.next; + } +} From 60f392b094a7d3f7d3532c029461956abd4413e4 Mon Sep 17 00:00:00 2001 From: JAEKWANG97 Date: Sat, 18 Jul 2026 15:12:05 +0900 Subject: [PATCH 2/3] Add coin change solution --- coin-change/jaekwang97.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 coin-change/jaekwang97.java diff --git a/coin-change/jaekwang97.java b/coin-change/jaekwang97.java new file mode 100644 index 0000000000..6c5cbcd260 --- /dev/null +++ b/coin-change/jaekwang97.java @@ -0,0 +1,20 @@ +import java.util.Arrays; + +class Solution { + public int coinChange(int[] coins, int amount) { + int[] dp = new int[amount + 1]; + + Arrays.fill(dp, amount + 1); + dp[0] = 0; + + for (int i = 1; i <= amount; i++) { + for (int coin : coins) { + if (i - coin >= 0) { + dp[i] = Math.min(dp[i], dp[i - coin] + 1); + } + } + } + + return dp[amount] == amount + 1 ? -1 : dp[amount]; + } +} From ebcbde08f67e5cf958fdc7bcaa19fdaaced47a1f Mon Sep 17 00:00:00 2001 From: JAEKWANG97 Date: Sat, 18 Jul 2026 16:24:24 +0900 Subject: [PATCH 3/3] Add word search solution --- word-search/jaekwang97.java | 55 +++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 word-search/jaekwang97.java diff --git a/word-search/jaekwang97.java b/word-search/jaekwang97.java new file mode 100644 index 0000000000..d6e7ff6cf6 --- /dev/null +++ b/word-search/jaekwang97.java @@ -0,0 +1,55 @@ +class Solution { + + static int[] dx = {0, 1, 0, -1}; + static int[] dy = {1, 0, -1, 0}; + static int n, m; + + public boolean exist(char[][] board, String word) { + m = board[0].length; + n = board.length; + + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + if (board[i][j] != word.charAt(0)) continue; + + char cur = board[i][j]; + board[i][j] = '#'; + boolean flag = dfs(board, word, 1, i, j); + board[i][j] = cur; + + if (flag) return true; + } + } + + return false; + } + + private static boolean dfs( + char[][] board, + String word, + int idx, + int x, + int y + ) { + if (idx == word.length()) return true; + + for (int i = 0; i < 4; i++) { + int nx = x + dx[i]; + int ny = y + dy[i]; + + if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue; + if (board[nx][ny] != word.charAt(idx)) continue; + + char cur = board[nx][ny]; + board[nx][ny] = '#'; + + boolean flag = dfs(board, word, idx + 1, nx, ny); + + board[nx][ny] = cur; + + if (flag) return true; + } + + return false; + } +}