diff --git a/combination-sum/youngduck.js b/combination-sum/youngduck.js new file mode 100644 index 0000000000..a25759dd5f --- /dev/null +++ b/combination-sum/youngduck.js @@ -0,0 +1,44 @@ +/** + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ +var combinationSum = function (candidates, target) { + // 작은숫자 부터 더해서, 더 큰 숫자를 더해볼필요없이 미리 리턴시키기위한용도, 중복값도 방지가능 + candidates.sort(); + const result = []; + + const sumArr = (arr) => { + if (arr.length === 0) return 0; + else { + const sum = arr.reduce((acc, cur) => acc + cur); + + return sum; + } + }; + + const backtrack = (targetArr, startIndex) => { + const sumData = sumArr(targetArr); + + if (sumData === target) { + result.push([...targetArr]); + return; + } + + for (let i = startIndex; i < candidates.length; i++) { + if (sumData < target) { + backtrack([...targetArr, candidates[i]], i); + } else if (sumData > target) { + continue; + } + } + }; + + // 백트랙킹 방식으로 풀예정 (재귀) + // target보다 작을경우 계속 더함. 클경우 재귀멈춤 backtrack인수에 + // targetArr만줬더니 result에 중복값이 생김. ex) 7을만들때[2,2,3],[2,3,2]같은 중복생김 + // 자기자신 이상의 index를 타게하기위해서 startIndex + backtrack([], 0); + + return result; +}; diff --git a/number-of-1-bits/youngduck.js b/number-of-1-bits/youngduck.js new file mode 100644 index 0000000000..332d4b1312 --- /dev/null +++ b/number-of-1-bits/youngduck.js @@ -0,0 +1,15 @@ +/** + * @param {number} n + * @return {number} + */ +var hammingWeight = function (n) { + // 이진수 변환함수 시간복잡도: O(1) + const bin = n.toString(2); + + // replace, replaceAll 시간복잡도: O(n) + const result = bin.replaceAll('0', '').length; + + // 시간복잡도: O(n), 공간복잡도: O(1) + + return result; +}; diff --git a/valid-palindrome/youngduck.js b/valid-palindrome/youngduck.js new file mode 100644 index 0000000000..12f671d34d --- /dev/null +++ b/valid-palindrome/youngduck.js @@ -0,0 +1,20 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function (s) { + // 1. toLowerCase() - O(n) + // 2. replace(/[^a-z0-9]/g, '') - O(n) + const clean = s.toLowerCase().replace(/[^a-z0-9]/g, ''); + + // 3. [...clean] 스프레드 연산자 - O(n) + // 4. reverse() - O(n) + // 5. join('') - O(n) + const reverse = [...clean].reverse().join(''); + + // 6. 문자열 비교 - O(n) + return clean === reverse; +}; + +// 시간복잡도 O(n) +// 공간복잡도 O(n)