From 78c1feac2d235fd3cf209d8d10265546471e33ad Mon Sep 17 00:00:00 2001 From: JEONGBEOM KO Date: Tue, 8 Apr 2025 23:46:39 +0900 Subject: [PATCH 1/7] add solution of valid-anagram --- valid-anagram/JEONGBEOMKO.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 valid-anagram/JEONGBEOMKO.java diff --git a/valid-anagram/JEONGBEOMKO.java b/valid-anagram/JEONGBEOMKO.java new file mode 100644 index 000000000..62bb582b0 --- /dev/null +++ b/valid-anagram/JEONGBEOMKO.java @@ -0,0 +1,29 @@ +import java.util.HashMap; +import java.util.Map; + +public class Solution { + + public boolean isAnagram(String s, String t) { + + Map charMap = new HashMap<>(); + + char[] sArr = s.toCharArray(); + for (char sa : sArr) { + charMap.put(sa, charMap.getOrDefault(sa, 0) + 1); + } + + char[] tArr = t.toCharArray(); + for (char ta : tArr) { + charMap.put(ta, charMap.getOrDefault(ta, 0) - 1); + } + + for (int cnt : charMap.values()) { + if (cnt != 0) { + return false; + } + } + + return true; + + } +} From 6068069b1b1b33f46141fd01107d0698fad1d00d Mon Sep 17 00:00:00 2001 From: JEONGBEOM KO Date: Fri, 11 Apr 2025 19:56:10 +0900 Subject: [PATCH 2/7] add: climbing stairs solution --- climbing-stairs/JEONGBEOMKO.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 climbing-stairs/JEONGBEOMKO.java diff --git a/climbing-stairs/JEONGBEOMKO.java b/climbing-stairs/JEONGBEOMKO.java new file mode 100644 index 000000000..c1f36c61c --- /dev/null +++ b/climbing-stairs/JEONGBEOMKO.java @@ -0,0 +1,19 @@ +package week02.Climbing_stairs; + +class Solution { + public int climbStairs(int n) { + + if (n == 1 || n == 2) { + return n; + } + + int[] cases = new int[n + 1]; + cases[1] = 1; + cases[2] = 2; + for (int i = 3; i <= n; i++) { + cases[i] = cases[i - 1] + cases[i - 2]; + } + + return cases[n]; + } +} From 91f6187ce7e02223037c2e0e1e7af137424ff4a4 Mon Sep 17 00:00:00 2001 From: JEONGBEOM KO Date: Fri, 11 Apr 2025 19:57:29 +0900 Subject: [PATCH 3/7] refactor: climbing stairs solution MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 패키지 삭제 --- climbing-stairs/JEONGBEOMKO.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/climbing-stairs/JEONGBEOMKO.java b/climbing-stairs/JEONGBEOMKO.java index c1f36c61c..0fc7cdba7 100644 --- a/climbing-stairs/JEONGBEOMKO.java +++ b/climbing-stairs/JEONGBEOMKO.java @@ -1,5 +1,3 @@ -package week02.Climbing_stairs; - class Solution { public int climbStairs(int n) { From 25693dfd3c7191c6ea3befa2b4655e93726faf59 Mon Sep 17 00:00:00 2001 From: JEONGBEOM KO Date: Fri, 11 Apr 2025 20:27:22 +0900 Subject: [PATCH 4/7] add: product of array except self solution --- product-of-array-except-self/JEONGBEOMKO.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 product-of-array-except-self/JEONGBEOMKO.java diff --git a/product-of-array-except-self/JEONGBEOMKO.java b/product-of-array-except-self/JEONGBEOMKO.java new file mode 100644 index 000000000..0f9b179c1 --- /dev/null +++ b/product-of-array-except-self/JEONGBEOMKO.java @@ -0,0 +1,27 @@ +/* [time-complexity]: O(n) + [space-complexity]: O(1) + */ +public class JEONGBEOMKO { + + class Solution { + public int[] productExceptSelf(int[] nums) { + int n = nums.length; + int[] result = new int[n]; + + // 왼쪽 곱 계산 + result[0] = 1; + for (int i = 1; i < n; i++) { + result[i] = result[i - 1] * nums[i - 1]; + } + + // 오른쪽 곱과 동시에 결과 계산 + int rightProduct = 1; + for (int i = n - 1; i >= 0; i--) { + result[i] = result[i] * rightProduct; + rightProduct *= nums[i]; + } + + return result; + } + } +} From 62ff83bc9182113f10b1f281acd69a553fffbb50 Mon Sep 17 00:00:00 2001 From: JEONGBEOM KO Date: Fri, 11 Apr 2025 20:54:23 +0900 Subject: [PATCH 5/7] add: 3sum solution --- 3sum/JEONGBEOMKO.java | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 3sum/JEONGBEOMKO.java diff --git a/3sum/JEONGBEOMKO.java b/3sum/JEONGBEOMKO.java new file mode 100644 index 000000000..7c10aed5c --- /dev/null +++ b/3sum/JEONGBEOMKO.java @@ -0,0 +1,36 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +class Solution { + public List> threeSum(int[] nums) { + /* + time complexity: O(n^2) + space complexity: O(1) + */ + Arrays.sort(nums); + List> result = new ArrayList<>(); + + for (int i = 0; i < nums.length - 2; i++) { + if (i > 0 && nums[i] == nums[i - 1]) continue; + + int left = i + 1, right = nums.length - 1; + + while (left < right) { + int sum = nums[i] + nums[left] + nums[right]; + + if (sum < 0) { + left++; + } else if (sum > 0) { + right--; + } else { + result.add(Arrays.asList(nums[i], nums[left], nums[right])); + while (left < right && nums[left] == nums[left + 1]) left++; + while (left < right && nums[right] == nums[right - 1]) right--; + left++; right--; + } + } + } + return result; + } +} From 47e4f78f216420a97583c7c7ddcde0422a9cdd62 Mon Sep 17 00:00:00 2001 From: JEONGBEOM KO Date: Fri, 11 Apr 2025 21:27:35 +0900 Subject: [PATCH 6/7] refactor: valid anagram solution --- valid-anagram/JEONGBEOMKO.java | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/valid-anagram/JEONGBEOMKO.java b/valid-anagram/JEONGBEOMKO.java index 62bb582b0..ee54000e4 100644 --- a/valid-anagram/JEONGBEOMKO.java +++ b/valid-anagram/JEONGBEOMKO.java @@ -2,28 +2,29 @@ import java.util.Map; public class Solution { - + /* + time complexity: O(n) + space complexity: O(1) + */ public boolean isAnagram(String s, String t) { + if (s.length() != t.length()) return false; - Map charMap = new HashMap<>(); + Map sFrequency = new HashMap<>(); - char[] sArr = s.toCharArray(); - for (char sa : sArr) { - charMap.put(sa, charMap.getOrDefault(sa, 0) + 1); + for (int i = 0; i < s.length(); i++) { + sFrequency.put(s.charAt(i), sFrequency.getOrDefault(s.charAt(i), 0) + 1); } - char[] tArr = t.toCharArray(); - for (char ta : tArr) { - charMap.put(ta, charMap.getOrDefault(ta, 0) - 1); + for (int i = 0; i < t.length(); i++) { + if (sFrequency.getOrDefault(t.charAt(i), 0) != 0) { + sFrequency.put(t.charAt(i), sFrequency.get(t.charAt(i)) - 1); + } } - for (int cnt : charMap.values()) { - if (cnt != 0) { - return false; - } + for (int count : sFrequency.values()) { + if (count != 0) return false; } return true; - } } From ac174f577058bb9716b3e9dba851be36f390e749 Mon Sep 17 00:00:00 2001 From: JEONGBEOM KO Date: Fri, 11 Apr 2025 21:48:38 +0900 Subject: [PATCH 7/7] add: validate binary search tree --- validate-binary-search-tree/JEONGBEOMKO.java | 34 ++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 validate-binary-search-tree/JEONGBEOMKO.java diff --git a/validate-binary-search-tree/JEONGBEOMKO.java b/validate-binary-search-tree/JEONGBEOMKO.java new file mode 100644 index 000000000..a0d76157d --- /dev/null +++ b/validate-binary-search-tree/JEONGBEOMKO.java @@ -0,0 +1,34 @@ +/** + * 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; + * } + * } + */ +/** + * time complexity: O(n) + * space complexity: O(h) + */ +class Solution { + public boolean isValidBST(TreeNode root) { + return isValidRange(root, Long.MIN_VALUE, Long.MAX_VALUE); + } + + private boolean isValidRange(TreeNode root, long min, long max) { + if (root == null) return true; + + if (root.val <= min || root.val >= max) return false; + + return isValidRange(root.left, min, root.val) + && isValidRange(root.right, root.val, max); + } + +}