diff --git a/combination-sum/jeongwoo903.js b/combination-sum/jeongwoo903.js new file mode 100644 index 000000000..df651c392 --- /dev/null +++ b/combination-sum/jeongwoo903.js @@ -0,0 +1,29 @@ +/* +* k: 후보 수 +* t: target / 최소 숫자 +* 시간 복잡도: O(k^t) +* 공간 복잡도; O(k^t * t) +*/ + +/** + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ + +var combinationSum = function(candidates, target) { + const combine = (sum, path, startIndex) => { + if (sum > target) return []; + if (sum === target) return [path]; + + return candidates + .slice(startIndex) + .flatMap((candidate, i) => + combine(sum + candidate, [...path, candidate], startIndex + i) + ); + }; + + return candidates.flatMap((candidate, i) => + combine(candidate, [candidate], i) + ); +}; diff --git a/decode-ways/jeongwoo903.js b/decode-ways/jeongwoo903.js new file mode 100644 index 000000000..cd676b71c --- /dev/null +++ b/decode-ways/jeongwoo903.js @@ -0,0 +1,27 @@ +/* +* 시간 복잡도: O(n) +* 공간 복잡도; O(n) +*/ + +/** + * @param {string} s + * @return {number} + */ +var numDecodings = function(s) { + if (s.length === 0 || s[0] === "0") return 0; + + let dp = new Array(s.length + 1).fill(0); + + dp[0] = 1; + dp[1] = 1; + + for (let i = 2; i <= s.length; i++) { + let single = s[i - 1]; + let double = s[i - 2] + s[i - 1]; + + if (single >= 1 && single <= 9) dp[i] += dp[i - 1]; + if (double >= 10 && double <= 26) dp[i] += dp[i - 2]; + } + + return dp[s.length]; +}; diff --git a/maximum-subarray/jeongwoo903.js b/maximum-subarray/jeongwoo903.js new file mode 100644 index 000000000..002e2d030 --- /dev/null +++ b/maximum-subarray/jeongwoo903.js @@ -0,0 +1,21 @@ +/* +* 시간 복잡도: O(n) +* 공간 복잡도: O(1) +*/ + +/** + * @param {number[]} nums + * @return {number} + */ +var maxSubArray = function(nums) { + let max = nums[0]; + let result = nums[0]; + + for (let index = 1; index < nums.length; index++) { + const num = nums[index]; + result = Math.max(result + num, num); + max = Math.max(max, result); + } + + return max; +}; diff --git a/number-of-1-bits/jeongwoo903.js b/number-of-1-bits/jeongwoo903.js new file mode 100644 index 000000000..c919cfe8d --- /dev/null +++ b/number-of-1-bits/jeongwoo903.js @@ -0,0 +1,14 @@ +/* +* 시간 복잡도: O(log n) +* 공간 복잡도; O(log n) +*/ + +/** + * @param {number} n + * @return {number} + */ +var hammingWeight = function(n) { + const dec = n.toString(2); + const parsedBits = [...dec].filter(item => item === '1'); + return parsedBits.length; +}; diff --git a/valid-palindrome/jeongwoo903.js b/valid-palindrome/jeongwoo903.js new file mode 100644 index 000000000..3b05727f6 --- /dev/null +++ b/valid-palindrome/jeongwoo903.js @@ -0,0 +1,20 @@ +/* +* 시간 복잡도: O(n) +* 공간 복잡도; O(n) +* +* 과정: +* 1. 소문자, 대문자, 숫자만 파싱 +* 2. 소문자로 변환 +* 3. 리버스 스트링과 기본 스트링과 대조 +*/ + +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function(s) { + const parsedString = s.replace(/[^a-zA-Z0-9]/g, ''); + const lowerString = parsedString.toLowerCase(); + const reverseString = lowerString.split("").reverse().join(""); + return reverseString === lowerString; +};