diff --git a/combination-sum/jun0811.js b/combination-sum/jun0811.js new file mode 100644 index 000000000..b1074c6ab --- /dev/null +++ b/combination-sum/jun0811.js @@ -0,0 +1,27 @@ +/** + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ +var combinationSum = function (candidates, target) { + const result = []; + candidates.sort((a, b) => a - b); + function backTracking(start, arr, total) { + if (total == target) { + result.push([...arr]); + return; + } + + for (let i = start; i < candidates.length; i++) { + const cur = candidates[i]; + if (cur + total > target) { + return; + } + + backTracking(i, [...arr, cur], total + cur); + } + } + + backTracking(0, [], 0); + return result; +}; diff --git a/decode-ways/jun0811.js b/decode-ways/jun0811.js new file mode 100644 index 000000000..8ac6f1c0b --- /dev/null +++ b/decode-ways/jun0811.js @@ -0,0 +1,32 @@ +/** + * @param {string} s + * @return {number} + */ + +function check(str) { + if (str.length == 2) { + if (str[0] == '0') return false; + } + if (str >= 1 && str <= 26) return true; + return false; +} + +var numDecodings = function (s) { + if (s[0] == '0') return 0; + const dp = [1, 1]; + + for (let i = 2; i <= s.length; i++) { + let tmp = dp[i - 1] + dp[i - 2]; + + // 2글자 체크 -> dp[i-2]을 뺴줌 + const two_c = String(s[i - 2]) + String(s[i - 1]); + if (!check(two_c)) tmp -= dp[i - 2]; + + // 1글자 체크 -> dp[i-1]을 빼줌 + if (!check(s[i - 1])) tmp -= dp[i - 1]; + + if (tmp == 0) return 0; + dp[i] = tmp; + } + return dp[s.length]; +}; diff --git a/maximum-subarray/jun0811.js b/maximum-subarray/jun0811.js new file mode 100644 index 000000000..a5b033689 --- /dev/null +++ b/maximum-subarray/jun0811.js @@ -0,0 +1,15 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var maxSubArray = function (nums) { + const dp = [nums[0]]; + for (let i = 1; i < nums.length; i++) { + const cur = nums[i]; + if (dp[i - 1] < 0) dp[i] = cur; + else { + dp[i] = dp[i - 1] + cur; + } + } + return Math.max(...dp); +}; diff --git a/number-of-1-bits/jun0811.js b/number-of-1-bits/jun0811.js index 15d687543..d2855f330 100644 --- a/number-of-1-bits/jun0811.js +++ b/number-of-1-bits/jun0811.js @@ -2,6 +2,9 @@ * @param {number} n * @return {number} */ + +// 1주차에 풀이 후 제출.. + var hammingWeight = function (n) { let res = 0; while (n > 0) { diff --git a/valid-palindrome/jun0811.js b/valid-palindrome/jun0811.js new file mode 100644 index 000000000..12730f3d0 --- /dev/null +++ b/valid-palindrome/jun0811.js @@ -0,0 +1,32 @@ +var isPalindrome = function (s) { + let left = 0; + let right = s.length - 1; + + while (left < right) { + while (left < right && !isAlphaNumeric(s[left])) { + left++; + } + + while (left < right && !isAlphaNumeric(s[right])) { + right--; + } + + if (s[left].toLowerCase() !== s[right].toLowerCase()) { + return false; + } + + left++; + right--; + } + + return true; +}; + +function isAlphaNumeric(char) { + const code = char.charCodeAt(0); + return ( + (code >= 48 && code <= 57) || // 0-9 + (code >= 65 && code <= 90) || // A-Z + (code >= 97 && code <= 122) + ); // a-z +}