From 74cea701219d4f8cf513b88b61480331a3861448 Mon Sep 17 00:00:00 2001 From: reach0908 Date: Mon, 4 Aug 2025 23:13:58 +0900 Subject: [PATCH 1/6] =?UTF-8?q?solve:=20valid-palindrome=20=ED=92=80?= =?UTF-8?q?=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- valid-palindrome/reach0908.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 valid-palindrome/reach0908.js diff --git a/valid-palindrome/reach0908.js b/valid-palindrome/reach0908.js new file mode 100644 index 000000000..ec504c36d --- /dev/null +++ b/valid-palindrome/reach0908.js @@ -0,0 +1,27 @@ +/** + * 시간복잡도: O(N) + * 공간복잡도: O(N) + * @param {string} s + * @return {boolean} + */ +const isPalindrome = function (s) { + const parsedString = s + .trim() + .replace(" ", "") + .replace(/[^a-zA-Z0-9]/g, "") + .toLowerCase(); + + let left = 0; + let right = parsedString.length - 1; + + while (left < right) { + if (parsedString[left] !== parsedString[right]) { + return false; + } + + left += 1; + right -= 1; + } + + return true; +}; From 1a194e70651d74f2a9e8f9b0c0a76a9a58ec8f8a Mon Sep 17 00:00:00 2001 From: reach0908 Date: Mon, 4 Aug 2025 23:26:24 +0900 Subject: [PATCH 2/6] =?UTF-8?q?fix:=20valid-palindrome=EC=9D=98=20?= =?UTF-8?q?=EA=B3=B5=EA=B0=84=EB=B3=B5=EC=9E=A1=EB=8F=84=EB=A5=BC=20O(1)?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- valid-palindrome/reach0908.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/valid-palindrome/reach0908.js b/valid-palindrome/reach0908.js index ec504c36d..2e804d477 100644 --- a/valid-palindrome/reach0908.js +++ b/valid-palindrome/reach0908.js @@ -1,6 +1,6 @@ /** * 시간복잡도: O(N) - * 공간복잡도: O(N) + * 공간복잡도: O(1) * @param {string} s * @return {boolean} */ From fe8e8bf13e048ea1e9f84987e9494456affc2ea0 Mon Sep 17 00:00:00 2001 From: reach0908 Date: Mon, 4 Aug 2025 23:34:17 +0900 Subject: [PATCH 3/6] =?UTF-8?q?solve:=20number-of-1-bits=20=ED=92=80?= =?UTF-8?q?=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- number-of-1-bits/reach0908.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 number-of-1-bits/reach0908.js diff --git a/number-of-1-bits/reach0908.js b/number-of-1-bits/reach0908.js new file mode 100644 index 000000000..8a888e6c3 --- /dev/null +++ b/number-of-1-bits/reach0908.js @@ -0,0 +1,23 @@ +/** + * 시간복잡도: O(n) + * 공간복잡도: O(1) + * @param {number} n + * @return {number} + */ +var hammingWeight = function (n) { + let num = n; + + let count = 0; + + while (num > 0) { + const left = num % 2; + + if (left === 1) { + count += 1; + } + + num = Math.floor(num / 2); + } + + return count; +}; From 6cad65fb1deb1d64382166819bcd2c34675b83e5 Mon Sep 17 00:00:00 2001 From: reach0908 Date: Sat, 9 Aug 2025 12:25:33 +0900 Subject: [PATCH 4/6] solve: combination sum --- combination-sum/reach0908.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 combination-sum/reach0908.js diff --git a/combination-sum/reach0908.js b/combination-sum/reach0908.js new file mode 100644 index 000000000..7351652b5 --- /dev/null +++ b/combination-sum/reach0908.js @@ -0,0 +1,34 @@ +/** + * 시간복잡도 O(n^(T/m)) + * 풀이방법: DFS 백트래킹 + * 결과: 2ms + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ +const combinationSum = function (candidates, target) { + const result = []; + const nums = []; + + const sortedCandidates = candidates.sort((a, b) => a - b); + + function dfs(start, sum) { + if (sum === target) { + result.push([...nums]); + } + + for (let i = start; i < sortedCandidates.length; i += 1) { + const num = sortedCandidates[i]; + + if (sum + num > target) break; + + nums.push(num); + dfs(i, sum + num); + nums.pop(); + } + } + + dfs(0, 0); + + return result; +}; From 1aa277593a032b0cba94273594be62fde9f01a37 Mon Sep 17 00:00:00 2001 From: reach0908 Date: Sat, 9 Aug 2025 12:54:33 +0900 Subject: [PATCH 5/6] =?UTF-8?q?solve:=20decode-ways=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 --- decode-ways/reach0908.js | 73 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 decode-ways/reach0908.js diff --git a/decode-ways/reach0908.js b/decode-ways/reach0908.js new file mode 100644 index 000000000..f539a38f8 --- /dev/null +++ b/decode-ways/reach0908.js @@ -0,0 +1,73 @@ +/** + * 시간복잡도: O(n) + * 실행속도: 65ms + * @param {string} s + * @return {number} + */ +const numDecodings = function (s) { + const n = s.length; + + const memo = new Array(n + 1).fill(0); + + function dfs(i) { + if (i === n) { + return 1; + } + + if (s[i] === "0") { + return 0; + } + + if (memo[i]) { + return memo[i]; + } + + let res = dfs(i + 1); + + if (i + 1 < n && Number(s.slice(i, i + 2) <= 26)) { + res += dfs(i + 2); + } + + memo[i] = res; + + return res; + } + + return dfs[0]; +}; + +/** + * 시간복잡도: O(n) + * 실행속도: 0~1ms + * @param {string} s + * @return {number} + */ +/** + * 시간 복잡도: O(n) + * 공간 복잡도: O(n) + */ +var numDecodings2 = function (s) { + const memo = new Map(); + memo.set(s.length, 1); + + function dfs(start) { + if (memo.has(start)) { + return memo.get(start); + } + + if (s[start] === "0") { + memo.set(start, 0); + } else if ( + start + 1 < s.length && + parseInt(s.slice(start, start + 2)) < 27 + ) { + memo.set(start, dfs(start + 1) + dfs(start + 2)); + } else { + memo.set(start, dfs(start + 1)); + } + + return memo.get(start); + } + + return dfs(0); +}; From cc752e5907c3bcb52231cd80f2f22c3da6145c05 Mon Sep 17 00:00:00 2001 From: reach0908 Date: Sat, 9 Aug 2025 13:14:24 +0900 Subject: [PATCH 6/6] =?UTF-8?q?solve:=20=EC=B5=9C=EB=8C=80=20=EB=B6=80?= =?UTF-8?q?=EB=B6=84=20=EB=B0=B0=EC=97=B4=20=EB=AC=B8=EC=A0=9C=20=ED=92=80?= =?UTF-8?q?=EC=9D=B4=20=EC=B6=94=EA=B0=80=20-=20O(n)=20=EC=8B=9C=EA=B0=84?= =?UTF-8?q?=EB=B3=B5=EC=9E=A1=EB=8F=84=EB=A1=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- maximum-subarray/reach0908.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 maximum-subarray/reach0908.js diff --git a/maximum-subarray/reach0908.js b/maximum-subarray/reach0908.js new file mode 100644 index 000000000..fa88f9f92 --- /dev/null +++ b/maximum-subarray/reach0908.js @@ -0,0 +1,19 @@ +/** + * 시간복잡도: O(n) + * 시간: 4ms + * @param {number[]} nums + * @return {number} + */ +var maxSubArray = function (nums) { + let maxResult = nums[0]; + let curResult = nums[0]; + + for (let i = 1; i < nums.length; i += 1) { + const num = nums[i]; + // 지금까지 누적합 vs 현재 날짜 + result = Math.max(curResult + num, num); + maxResult = Math.max(maxResult, curResult); + } + + return maxResult; +};