diff --git a/coin-change/HerrineKim.js b/coin-change/HerrineKim.js new file mode 100644 index 000000000..de894daca --- /dev/null +++ b/coin-change/HerrineKim.js @@ -0,0 +1,21 @@ +// 시간 복잡도: O(n * m) +// 공간 복잡도: O(n) + +/** + * @param {number[]} coins + * @param {number} amount + * @return {number} + */ +var coinChange = function(coins, amount) { + const dp = new Array(amount + 1).fill(Infinity); + dp[0] = 0; + + for (let coin of coins) { + for (let i = coin; i <= amount; i++) { + dp[i] = Math.min(dp[i], dp[i - coin] + 1); + } + } + + return dp[amount] === Infinity ? -1 : dp[amount]; +}; + diff --git a/missing-number/HerrineKim.js b/missing-number/HerrineKim.js new file mode 100644 index 000000000..0742925b8 --- /dev/null +++ b/missing-number/HerrineKim.js @@ -0,0 +1,17 @@ +// 시간 복잡도: O(n) +// 공간 복잡도: O(1) + +/** + * @param {number[]} nums + * @return {number} + */ +var missingNumber = function(nums) { + const n = nums.length; + // 0부터 n까지의 합 공식: n * (n + 1) / 2 + const expectedSum = (n * (n + 1)) / 2; + // 실제 배열의 합 + const actualSum = nums.reduce((sum, num) => sum + num, 0); + + return expectedSum - actualSum; +}; + diff --git a/palindromic-substrings/HerrineKim.js b/palindromic-substrings/HerrineKim.js new file mode 100644 index 000000000..b0b563909 --- /dev/null +++ b/palindromic-substrings/HerrineKim.js @@ -0,0 +1,25 @@ +// 시간 복잡도: O(n^2) +// 공간 복잡도: O(1) + +/** + * @param {string} s + * @return {number} + */ +var countSubstrings = function(s) { + let count = 0; + + const countPalindrome = (left, right) => { + while (left >= 0 && right < s.length && s[left] === s[right]) { + count++; + left--; + right++; + } + }; + + for (let i = 0; i < s.length; i++) { + countPalindrome(i, i); + countPalindrome(i, i + 1); + } + + return count; +};