diff --git a/combination-sum/krokerdile.js b/combination-sum/krokerdile.js new file mode 100644 index 000000000..e4441b37d --- /dev/null +++ b/combination-sum/krokerdile.js @@ -0,0 +1,26 @@ +/** + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ +var combinationSum = function(candidates, target) { + const result = []; + + const dfs = (start, path, sum) => { + if (sum === target) { + result.push([...path]); // 정답 조합 발견 + return; + } + + if (sum > target) return; // target 초과 -> 백트랙 + + for (let i = start; i < candidates.length; i++) { + path.push(candidates[i]); // 숫자 선택 + dfs(i, path, sum + candidates[i]); // 같은 인덱스부터 다시 탐색 (중복 사용 허용) + path.pop(); // 백트래킹 + } + }; + + dfs(0, [], 0); + return result; +}; diff --git a/decode-ways/krokerdile.js b/decode-ways/krokerdile.js new file mode 100644 index 000000000..c604be77c --- /dev/null +++ b/decode-ways/krokerdile.js @@ -0,0 +1,27 @@ +/** + * @param {string} s + * @return {number} + */ +var numDecodings = function(s) { + const n = s.length; + const memo = {}; + + function dfs(index) { + if (index === n) return 1; + if (s[index] === '0') return 0; + if (memo.hasOwnProperty(index)) return memo[index]; + + let count = dfs(index + 1); + if (index + 1 < n) { + const twoDigit = parseInt(s.slice(index, index + 2)); + if (twoDigit >= 10 && twoDigit <= 26) { + count += dfs(index + 2); + } + } + + memo[index] = count; + return count; + } + + return dfs(0); +}; diff --git a/maximum-subarray/krokerdile.js b/maximum-subarray/krokerdile.js new file mode 100644 index 000000000..12853fb3c --- /dev/null +++ b/maximum-subarray/krokerdile.js @@ -0,0 +1,16 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var maxSubArray = function(nums) { + let maxSum = nums[0]; + let currentSum = nums[0]; + + for (let i = 1; i < nums.length; i++) { + // 지금 원소 자체가 더 클 수도 있음 (부분합 리셋) + currentSum = Math.max(nums[i], currentSum + nums[i]); + maxSum = Math.max(maxSum, currentSum); + } + + return maxSum; +}; diff --git a/number-of-1-bits/krokerdile.js b/number-of-1-bits/krokerdile.js new file mode 100644 index 000000000..4742faf6f --- /dev/null +++ b/number-of-1-bits/krokerdile.js @@ -0,0 +1,14 @@ +/** + * @param {number} n + * @return {number} + */ +var hammingWeight = function(n) { + let list = n.toString(2).split('').map(Number); + let sum = 0; + list.forEach((m)=>{ + if(m == 1){ + sum += 1;a + } + }) + return sum; +}; diff --git a/valid-palindrome/krokerdile.js b/valid-palindrome/krokerdile.js new file mode 100644 index 000000000..809283bf7 --- /dev/null +++ b/valid-palindrome/krokerdile.js @@ -0,0 +1,9 @@ +function filterStr(inputString) { + return inputString.replace(/[^a-zA-Z0-9]/g, '').toLowerCase(); +} + +var isPalindrome = function(s) { + const filtered = filterStr(s); + const reversed = filtered.split('').reverse().join(''); + return filtered === reversed; +};