diff --git a/climbing-stairs/hwanmini.js b/climbing-stairs/hwanmini.js new file mode 100644 index 000000000..3274559a0 --- /dev/null +++ b/climbing-stairs/hwanmini.js @@ -0,0 +1,18 @@ +// 시간복잡도 O(n) +// 공간복잡도 O(n) + +/** + * @param {number} n + * @return {number} + */ +var climbStairs = function(n) { + const stairs = [1, 2] + + for (let i = 2; i < n; i++) { + stairs[i] = stairs[i-1] + stairs[i-2] + } + + return stairs[n-1] +}; + +console.log(climbStairs(5)) diff --git a/combination-sum/hwanmini.js b/combination-sum/hwanmini.js new file mode 100644 index 000000000..4d5a3af58 --- /dev/null +++ b/combination-sum/hwanmini.js @@ -0,0 +1,32 @@ +// 시간복잡도: O(c^t) +// 공간복잡도: O(t) + +/** + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ +var combinationSum = function(candidates, target) { + const result = []; + + const dfs = (startIdx, subset = [], sum = 0) => { + if (sum > target) return; + if (sum === target) { + result.push([...subset]); + return; + } + + + for (let i = startIdx; i < candidates.length; i++) { + subset.push(candidates[i]); + dfs(i, subset, sum + candidates[i]); + subset.pop(); + } + }; + + dfs(0); + + return result; +}; + +console.log(combinationSum([2, 3, 6, 7], 7)); diff --git a/two-sum/hwanmini.js b/two-sum/hwanmini.js new file mode 100644 index 000000000..822255f41 --- /dev/null +++ b/two-sum/hwanmini.js @@ -0,0 +1,39 @@ +// 시간복잡도 O(n log n) +// 공간복잡도 O(n) + +/** + * @param {number[]} nums + * @param {number} target + * @return {number[]} + */ +var twoSum = function(nums, target) { + + + const numsArr = nums.map((num,idx) => [num,idx]) + numsArr.sort((a,b) => a[0] - b[0]) + + + let leftIdx = 0; + let rightIdx = nums.length - 1; + + while (leftIdx <= rightIdx) { + if (numsArr[leftIdx][0] + numsArr[rightIdx][0] === target) { + return [numsArr[leftIdx][1], numsArr[rightIdx][1]] + } + + if (numsArr[rightIdx][0] + numsArr[leftIdx][0] > target) { + rightIdx-- + } else { + leftIdx++ + } + } + return [] +}; + + +const nums = [2,7,11,15] +const target = 9 + +console.log(twoSum(nums,target)) +console.log(twoSum([3,2,4],6)) +console.log(twoSum([3,3],6))