From 11cc265633b870f25c49451b9c56f4ee5e717e0d Mon Sep 17 00:00:00 2001 From: reach0908 Date: Mon, 28 Jul 2025 22:23:43 +0900 Subject: [PATCH 1/5] =?UTF-8?q?solve:=20valid-anagram=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=20=ED=92=80=EC=9D=B4=20=EC=B6=94=EA=B0=80=20-=20=EB=91=90=20?= =?UTF-8?q?=EA=B0=80=EC=A7=80=20=EB=B0=A9=EB=B2=95=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- valid-anagram/reach0908.js | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 valid-anagram/reach0908.js diff --git a/valid-anagram/reach0908.js b/valid-anagram/reach0908.js new file mode 100644 index 000000000..7d325ffc7 --- /dev/null +++ b/valid-anagram/reach0908.js @@ -0,0 +1,40 @@ +/** + * @description + * time complexity: O(nlogn) split 시 새로운 배열을 생성하고 sort 시 nlogn 시간 소요 + * space complexity: O(n) split 시 새로운 배열을 생성함 + * runtime: 32ms + * 풀이 방법: 두 문자열을 정렬하여 비교하는 방법 + * @param {string} s + * @param {string} t + * @return {boolean} + */ +const isAnagram = function (s, t) { + return s.split("").sort().join("") === t.split("").sort().join(""); +}; + +/** + * @description + * time complexity: O(n) + * space complexity: O(n) + * runtime: 15ms + * 풀이 방법: 해쉬맵을 통해 카운트를 추가하거나 제거하는 방식, 유니코드도 대응가능 + * @param {string} s + * @param {string} t + * @return {boolean} + */ +const isAnagramSolution2 = function (s, t) { + if (s.length !== t.length) return false; + + const map = new Map(); + + for (let i = 0; i < s.length; i += 1) { + map.set(s[i], (map.get(s[i]) || 0) + 1); + map.set(t[i], (map.get(t[i]) || 0) - 1); + } + + for (const value of map.values()) { + if (value !== 0) return false; + } + + return true; +}; From 0f6f240eec7dad5f01202da3046513944a17b90d Mon Sep 17 00:00:00 2001 From: reach0908 Date: Mon, 28 Jul 2025 22:33:26 +0900 Subject: [PATCH 2/5] =?UTF-8?q?solve:=20climbing=20stairs=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- climbing-stairs/reach0908.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 climbing-stairs/reach0908.js diff --git a/climbing-stairs/reach0908.js b/climbing-stairs/reach0908.js new file mode 100644 index 000000000..aa49b68c3 --- /dev/null +++ b/climbing-stairs/reach0908.js @@ -0,0 +1,18 @@ +/** + * @description + * time complexity: O(n) + * space complexity: O(n) + * runtime: 0ms + * 풀이 방법: 기본적인 DP 풀이 방법 + * @param {number} n + * @return {number} + */ +const climbStairs = function (n) { + const dp = [1, 2]; + + for (let i = 2; i < n; i += 1) { + dp[i] = dp[i - 1] + dp[i - 2]; + } + + return dp[n - 1]; +}; From 2f24f39669e4495da3e0004adabc4aa08e34af1a Mon Sep 17 00:00:00 2001 From: reach0908 Date: Tue, 29 Jul 2025 22:33:56 +0900 Subject: [PATCH 3/5] =?UTF-8?q?solve:=20product-of-array-except-self=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=ED=92=80=EC=9D=B4=20(=EC=8B=A4=ED=8C=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- product-of-array-except-self/reach0908.js | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 product-of-array-except-self/reach0908.js diff --git a/product-of-array-except-self/reach0908.js b/product-of-array-except-self/reach0908.js new file mode 100644 index 000000000..498cf2e57 --- /dev/null +++ b/product-of-array-except-self/reach0908.js @@ -0,0 +1,28 @@ +/** + * @description + * time complexity: O(n) + * space complexity: O(n) + * runtime: 5ms + * 풀이 방법 : 40분고민하다가 다른사람 풀이보고 누적합을 이용하면 된다해서 구현함 + * @param {number[]} nums + * @return {number[]} + */ +var productExceptSelf = function (nums) { + const result = new Array(nums.length).fill(1); + + let prefix = 1; + + for (let i = 0; i < nums.length; i += 1) { + result[i] = prefix; + prefix *= nums[i]; + } + + let postfix = 1; + + for (let i = nums.length - 1; i >= 0; i -= 1) { + result[i] *= postfix; + postfix *= nums[i]; + } + + return result; +}; From b7514ac7a974db0ed494153c1104f8a18aad181c Mon Sep 17 00:00:00 2001 From: reach0908 Date: Sat, 2 Aug 2025 02:53:05 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20threeSum=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=ED=92=80=EC=9D=B4=20=EC=B6=94=EA=B0=80=20-=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=20=EB=B0=8F=20=ED=88=AC=20=ED=8F=AC=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=20=EB=B0=A9=EC=8B=9D=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3sum/reach0908.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 3sum/reach0908.js diff --git a/3sum/reach0908.js b/3sum/reach0908.js new file mode 100644 index 000000000..18895e583 --- /dev/null +++ b/3sum/reach0908.js @@ -0,0 +1,46 @@ +/** + * 시간복잡도: O(n²) + * 공간복잡도: O(1) (결과 배열 제외) + * 풀이 방법: 정렬 후 투 포인터 방식 + * @param {number[]} nums + * @return {number[][]} + */ +const threeSum = function (nums) { + const sortedNums = nums.sort((a, b) => a - b); + const result = []; + + for (let i = 0; i < sortedNums.length; i += 1) { + // 첫 번째 요소의 중복 제거 + if (i > 0 && sortedNums[i] === sortedNums[i - 1]) { + continue; + } + + let left = i + 1; + let right = sortedNums.length - 1; + + while (left < right) { + const threeSum = sortedNums[i] + sortedNums[left] + sortedNums[right]; + + if (threeSum > 0) { + right -= 1; + } else if (threeSum < 0) { + left += 1; + } else { + result.push([sortedNums[i], sortedNums[left], sortedNums[right]]); + + // 중복 제거 + while (left < right && sortedNums[left] === sortedNums[left + 1]) { + left += 1; + } + while (left < right && sortedNums[right] === sortedNums[right - 1]) { + right -= 1; + } + + left += 1; + right -= 1; + } + } + } + + return result; +}; From b4e34ded56a50634c2fe7696dcaf73c60423faef Mon Sep 17 00:00:00 2001 From: reach0908 Date: Sat, 2 Aug 2025 22:51:02 +0900 Subject: [PATCH 5/5] =?UTF-8?q?solve:=20validate-binary-search-tree=20?= =?UTF-8?q?=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- validate-binary-search-tree/reach0908.js | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 validate-binary-search-tree/reach0908.js diff --git a/validate-binary-search-tree/reach0908.js b/validate-binary-search-tree/reach0908.js new file mode 100644 index 000000000..811abc058 --- /dev/null +++ b/validate-binary-search-tree/reach0908.js @@ -0,0 +1,26 @@ +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @return {boolean} + */ +var isValidBST = function (root, low = -Infinity, high = Infinity) { + if (!root) { + return true; + } + + if (root.val <= low || root.val >= high) { + return false; + } + + return ( + isValidBST(root.left, low, root.val) && + isValidBST(root.right, root.val, high) + ); +};