From 30802e92ff15c89d881e098d8d56548232e77b76 Mon Sep 17 00:00:00 2001 From: Finn <82873315+uraflower@users.noreply.github.com> Date: Mon, 14 Apr 2025 15:21:42 +0900 Subject: [PATCH 1/5] [ PS ] : Valid Palindrome --- valid-palindrome/uraflower.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 valid-palindrome/uraflower.js diff --git a/valid-palindrome/uraflower.js b/valid-palindrome/uraflower.js new file mode 100644 index 000000000..6882f0083 --- /dev/null +++ b/valid-palindrome/uraflower.js @@ -0,0 +1,26 @@ +/** + * 주어진 문자열이 조건을 만족하는 회문인지 여부를 반환하는 함수 + * @param {string} s + * @return {boolean} + */ +const isPalindrome = function(s) { + const filtered = Array.from(s.toLowerCase()).reduce((str, char) => { + return isAlphanumeric(char) ? str + char : str; + }, ''); + + for (let left = 0, right = filtered.length - 1; left < right; left++, right--) { + if (filtered[left] !== filtered[right]) { + return false; + } + } + + return true; +}; + + +function isAlphanumeric(char) { + return char !== ' ' && (('a' <= char && char <= 'z') || !Number.isNaN(Number(char))); +} + +// 시간복잡도: O(n) +// 공간복잡도: O(n) From bb212f368024922847f119e930ddc569b926df9f Mon Sep 17 00:00:00 2001 From: Finn <82873315+uraflower@users.noreply.github.com> Date: Tue, 15 Apr 2025 11:56:40 +0900 Subject: [PATCH 2/5] [ PS ] : Number of 1 Bits --- number-of-1-bits/uraflower.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 number-of-1-bits/uraflower.js diff --git a/number-of-1-bits/uraflower.js b/number-of-1-bits/uraflower.js new file mode 100644 index 000000000..148519525 --- /dev/null +++ b/number-of-1-bits/uraflower.js @@ -0,0 +1,12 @@ +/** + * 주어진 숫자를 2진수로 표현했을 때 비트가 1인 개수를 반환하는 함수 + * @param {number} n + * @return {number} + */ +const hammingWeight = function(n) { + const binary = n.toString(2); + return Array.from(binary).filter((bit) => bit == 1).length; +}; + +// 시간복잡도: O(n) +// 공간복잡도: O(n) From 16853451a6c3be3d423f9b03ec9752ba8243204f Mon Sep 17 00:00:00 2001 From: Finn <82873315+uraflower@users.noreply.github.com> Date: Wed, 16 Apr 2025 13:11:23 +0900 Subject: [PATCH 3/5] [ PS ] : Combination Sum --- combination-sum/uraflower.js | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 combination-sum/uraflower.js diff --git a/combination-sum/uraflower.js b/combination-sum/uraflower.js new file mode 100644 index 000000000..86770b801 --- /dev/null +++ b/combination-sum/uraflower.js @@ -0,0 +1,44 @@ +/** + * 주어진 배열의 원소 조합(중복 허용)의 합이 target인 모든 경우를 반환하는 함수 + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ +const combinationSum = function(candidates, target) { + const sortedCandidates = candidates.filter((x) => x <= target).sort((a, b) => Number(a) - Number(b)); + const answer = []; + + if (sortedCandidates.length === 0) { + return answer; + } + + function search(currentIdx, combination, total) { + if (total === target) { + answer.push([...combination]); // 배열 자체를 넣으면 참조 때문에 값이 변경되므로, 복사해서 넣어야 함 + return; + } + + if (total > target) { + return; // backtracking + } + + combination.push(sortedCandidates[currentIdx]); + search(currentIdx, combination, total + sortedCandidates[currentIdx]); + combination.pop(); + + if (total + sortedCandidates[currentIdx] > target) { + return; // backtracking + } + + if (currentIdx + 1 < sortedCandidates.length) { + search(currentIdx + 1, combination, total); + } + } + + search(0, [], 0); + return answer; +}; + +// t: target +// 시간복잡도: O(2^t) +// 공간복잡도: O(t) From 2dbaefcddd762a66603de44157efc60fdfc69dc1 Mon Sep 17 00:00:00 2001 From: Finn <82873315+uraflower@users.noreply.github.com> Date: Thu, 17 Apr 2025 13:56:43 +0900 Subject: [PATCH 4/5] [ PS ] : Decode Ways --- decode-ways/uraflower.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 decode-ways/uraflower.js diff --git a/decode-ways/uraflower.js b/decode-ways/uraflower.js new file mode 100644 index 000000000..a73e99617 --- /dev/null +++ b/decode-ways/uraflower.js @@ -0,0 +1,36 @@ +/** + * 주어진 문자열을 복호화하는 경우의 수를 반환하는 함수 + * @param {string} s + * @return {number} + */ +const numDecodings = function(s) { + const dp = {}; + + function decode(idx) { + if (s[idx] === '0') { + return 0; + } + + if (idx === s.length) { + return 1; + } + + if (dp[idx]) { + return dp[idx]; + } + + let result = 0; + result += decode(idx + 1); // 현재 문자만 쓰는 경우: 다음 문자부터 탐색 + if (s[idx + 1] && Number(s[idx] + s[idx+1]) <= 26) { + result += decode(idx + 2); // 현재 문자와 다음 문자 붙여서 쓰는 경우: 다다음 문자부터 탐색 + } + + dp[idx] = result; + return result; + } + + return decode(0); +}; + +// 시간복잡도: O(n) (메모이제이션 안하면 매 인덱스마다 최대 2개의 하위 호출이 발생하여 O(2^n)) +// 공간복잡도: O(n) From 5d953b9366c358dde4a3e4949c2cbc1df5e009bd Mon Sep 17 00:00:00 2001 From: Finn <82873315+uraflower@users.noreply.github.com> Date: Fri, 18 Apr 2025 15:27:25 +0900 Subject: [PATCH 5/5] [ PS ] : Maximum Subarray --- maximum-subarray/uraflower.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 maximum-subarray/uraflower.js diff --git a/maximum-subarray/uraflower.js b/maximum-subarray/uraflower.js new file mode 100644 index 000000000..2ff4d074c --- /dev/null +++ b/maximum-subarray/uraflower.js @@ -0,0 +1,22 @@ +/** + * 주어진 배열에서 원소의 합이 가장 큰 부분 배열의 합을 반환하는 함수 + * @param {number[]} nums + * @return {number} + */ +const maxSubArray = function(nums) { + let max = nums[0]; + let subSum = 0; + + nums.forEach((num) => { + subSum = Math.max(subSum + num, num); + + if (max < subSum) { + max = subSum; + } + }); + + return max; +}; + +// 시간복잡도: O(n) +// 공간복잡도: O(1)