From a27fb7c060069c4195919049026ff601ad35f403 Mon Sep 17 00:00:00 2001 From: ready-oun Date: Thu, 10 Apr 2025 23:36:23 +0900 Subject: [PATCH 1/5] [ready-oun] Week 2 - Valid Anagram --- valid-anagram/ready-oun.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 valid-anagram/ready-oun.java diff --git a/valid-anagram/ready-oun.java b/valid-anagram/ready-oun.java new file mode 100644 index 000000000..3e3d0107c --- /dev/null +++ b/valid-anagram/ready-oun.java @@ -0,0 +1,25 @@ +import java.util.Arrays; + +class Solution { + public boolean isAnagram(String s, String t) { + // If len diff, they can't be anagram + if (s.length() != t.length()) return false; + + // convert to char arr & sort + char[] sArr = s.toCharArray(); + char[] tArr = t.toCharArray(); + Arrays.sort(sArr); + Arrays.sort(tArr); + + // comp sorted arr + return Arrays.equals(sArr, tArr); + + // runtime: 4ms + } +} + +/** + * 정렬 2번 → O(n log n) + * 배열 비교 → O(n) + * 전체: O(n log n) (성능은 나쁘지 않음) + */ \ No newline at end of file From 452ae94e7b1b27e71713651e56e6e54501ba0959 Mon Sep 17 00:00:00 2001 From: ready-oun Date: Thu, 10 Apr 2025 23:50:26 +0900 Subject: [PATCH 2/5] add n" --- valid-anagram/ready-oun.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/valid-anagram/ready-oun.java b/valid-anagram/ready-oun.java index 3e3d0107c..144959162 100644 --- a/valid-anagram/ready-oun.java +++ b/valid-anagram/ready-oun.java @@ -22,4 +22,4 @@ public boolean isAnagram(String s, String t) { * 정렬 2번 → O(n log n) * 배열 비교 → O(n) * 전체: O(n log n) (성능은 나쁘지 않음) - */ \ No newline at end of file + */ From 7904a3ce0f29f1f18d323e3409cbffbaba7b3adf Mon Sep 17 00:00:00 2001 From: ready-oun Date: Fri, 11 Apr 2025 00:06:30 +0900 Subject: [PATCH 3/5] [ready-oun] week02 - climbing chairs solved --- climbing-stairs/ready-oun.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 climbing-stairs/ready-oun.java diff --git a/climbing-stairs/ready-oun.java b/climbing-stairs/ready-oun.java new file mode 100644 index 000000000..2b87151d2 --- /dev/null +++ b/climbing-stairs/ready-oun.java @@ -0,0 +1,25 @@ +class Solution { + public int climbStairs(int n) { + if (n <= 2) return n; // base cases + + int first = 1; // f(1) + int second = 2; // f(2) + + // bottom-up dp: s to n + for (int i = 3; i <= n; i++) { + int current = first + second; // f(i) = f(i-1) + f(i-2) + first = second; // + second = current; + } + return second; + } +} + +/** + Fibonacci-like DP problem -> f(n) = f(n-1) + f(n-2) + (n 번째 칸에 오르는 방법의 개수) = (n-1 번째 칸에 오르는 방법의 개수) + (n-2 번째 칸에 오르는 방법의 개수) + - Time Complexity: O(n) + loop from 3 to n once + - Space Complexity: O(1) + only 2 var are used + */ From 6f68e8d121f2459aca718de15e444303741e193a Mon Sep 17 00:00:00 2001 From: ready-oun Date: Sat, 12 Apr 2025 21:52:57 +0900 Subject: [PATCH 4/5] solve: 3sum & product except self --- 3sum/ready-oun.java | 64 +++++++++++++++++++++ product-of-array-except-self/ready-oun.java | 36 ++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 3sum/ready-oun.java create mode 100644 product-of-array-except-self/ready-oun.java diff --git a/3sum/ready-oun.java b/3sum/ready-oun.java new file mode 100644 index 000000000..113dffd75 --- /dev/null +++ b/3sum/ready-oun.java @@ -0,0 +1,64 @@ +import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; + +class Solution { + public List> threeSum(int[] nums) { + 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; + int right = nums.length - 1; + + while (left < right) { + int sum = nums[i] + nums[left] + nums[right]; + + if (sum == 0) { + + // result.add(Arrays.asList(nums[i], nums[left], nums[right])); + List triplet = new ArrayList<>(); + triplet.add(nums[i]); + triplet.add(nums[left]); + triplet.add(nums[right]); + + result.add(triplet); + + while (left < right && nums[left] == nums[left + 1]) left++; + while (left < right && nums[right] == nums[right - 1]) right--; + + left++; + right--; + + } else if (sum < 0) { + left++; + } else { + right--; + } + } + } + return result; + } +} + +/** + Two pointers - fix 1 and use 2 ptrs + nums[i] + nums[L] + nums[R] == 0 + no duplicates + + 1. sort array + 2. skip repeats + - nums[i] == nums[i - 1] + - nums[left] == nums[left + 1] + - nums[right] == nums[right - 1] + 3. check if sum == 0 + 4. move L right if sum < 0 + 5. move R left if sum > 0 else + + List: [0, 0, 0] + List>: [[0, 0, 0], [-2, -3, 5]] + nums.length - 2까지만 반복: for no out of bounds + (last 2 val for left, right each) + */ \ No newline at end of file diff --git a/product-of-array-except-self/ready-oun.java b/product-of-array-except-self/ready-oun.java new file mode 100644 index 000000000..d390e506a --- /dev/null +++ b/product-of-array-except-self/ready-oun.java @@ -0,0 +1,36 @@ +class Solution { + public int[] productExceptSelf(int[] nums) { + int n = nums.length; + int[] answer = new int[n]; + + // prefix product + answer[0] = 1; + for (int i = 1; i < n; i++) { + answer[i] = answer[i - 1] * nums[i - 1]; + } + + // suffix product + int suffix = 1; + for (int i = n - 1; i >= 0; i--) { + answer[i] *= suffix; // answer의 prefix에 곱 -> 자기 자신 제외한 전체 곱 완성 + suffix *= nums[i]; // suffix 갱신 (*nums[i] 누적) + } + + return answer; + } +} + +/** + return int[] answer + -> product of all nums except nums[i] + + prefix -> answer[i] = nums[0] * nums[1] * ... * nums[i-1] + answer[i-1] * nums[i-1] 로 점화식 표현. + suffix -> suffix[i] = nums[i+1] * nums[i+2] * ... * nums[n-1] + + MUST: O(n) time w/o division like total product / nums[i] + + answer[i] = prefix[i] * suffix[i]; + but in O(1) extra space complexity + -> no extra arr for suffix -> var suf *= nums[i] 로 누적 + */ From b1157628db232f0847687279db290c988ab5624d Mon Sep 17 00:00:00 2001 From: ready-oun Date: Sat, 12 Apr 2025 21:56:20 +0900 Subject: [PATCH 5/5] add one line eof --- 3sum/ready-oun.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3sum/ready-oun.java b/3sum/ready-oun.java index 113dffd75..9e1874d15 100644 --- a/3sum/ready-oun.java +++ b/3sum/ready-oun.java @@ -61,4 +61,4 @@ public List> threeSum(int[] nums) { List>: [[0, 0, 0], [-2, -3, 5]] nums.length - 2까지만 반복: for no out of bounds (last 2 val for left, right each) - */ \ No newline at end of file + */