diff --git a/combination-sum/JangAyeon.js b/combination-sum/JangAyeon.js new file mode 100644 index 0000000000..ba12a19eeb --- /dev/null +++ b/combination-sum/JangAyeon.js @@ -0,0 +1,23 @@ +/** + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ +var combinationSum = function (arr, target) { + const N = arr.length; + const answer = []; + function dfs(total, idx, route) { + if (total >= target) { + if (total == target) { + answer.push(route); + } + return; + } + for (let i = idx; i < N; i++) { + dfs(total + arr[i], i, [...route, arr[i]]); + } + } + + dfs(0, 0, []); + return answer; +}; diff --git a/decode-ways/JangAyeon.js b/decode-ways/JangAyeon.js new file mode 100644 index 0000000000..0bad90be6b --- /dev/null +++ b/decode-ways/JangAyeon.js @@ -0,0 +1,23 @@ +var numDecodings = function (s) { + const N = s.length; + const memo = {}; + + function dfs(i) { + if (i === N) return 1; + if (s[i] === "0") return 0; // 0은 단독으로 decode 불가능 + if (memo[i] !== undefined) return memo[i]; + + // 1자리 + let count = dfs(i + 1); + + // 2자리 + if (i + 1 < N && Number(s.slice(i, i + 2)) <= 26) { + count += dfs(i + 2); + } + + memo[i] = count; + return count; + } + + return dfs(0); +}; diff --git a/maximum-subarray/JangAyeon.js b/maximum-subarray/JangAyeon.js new file mode 100644 index 0000000000..de25e24b90 --- /dev/null +++ b/maximum-subarray/JangAyeon.js @@ -0,0 +1,19 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var maxSubArray = function (nums) { + let pointer = nums[0]; + let answer = pointer; + const N = nums.length; + for (let idx = 1; idx < N; idx++) { + if (nums[idx] > pointer + nums[idx]) { + pointer = nums[idx]; + } else { + pointer += nums[idx]; + } + // console.log(idx, pointer) + answer = Math.max(pointer, answer); + } + return answer; +}; diff --git a/number-of-1-bits/JangAyeon.js b/number-of-1-bits/JangAyeon.js new file mode 100644 index 0000000000..1ace955950 --- /dev/null +++ b/number-of-1-bits/JangAyeon.js @@ -0,0 +1,21 @@ +/** + * @param {number} n + * @return {number} + */ +var hammingWeight = function (n) { + function calDivision(num) { + return { v: Math.floor(num / 2), rest: num % 2 }; + } + let num = n; + let result = 0; + while (true) { + const { v, rest } = calDivision(num); + result += rest; + if (v == 0) { + break; + } + num = v; + } + + return result; +}; diff --git a/valid-palindrome/JangAyeon.js b/valid-palindrome/JangAyeon.js new file mode 100644 index 0000000000..4760f29e63 --- /dev/null +++ b/valid-palindrome/JangAyeon.js @@ -0,0 +1,20 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function (s) { + const sLowered = [...s.toLowerCase().replace(" ", "")]; + const isAlpha = (item) => item.charCodeAt() >= 97 && item.charCodeAt() <= 122; + const isNumber = (item) => item.charCodeAt() >= 48 && item.charCodeAt() <= 57; + const str = sLowered.filter((c) => isAlpha(c) || isNumber(c)); + const N = str.length; + let [start, end] = [0, N - 1]; + while (start <= end) { + if (str[start] != str[end]) { + return false; + } + start++; + end--; + } + return true; +};