diff --git a/combination-sum/robinyoon-dev.js b/combination-sum/robinyoon-dev.js new file mode 100644 index 0000000000..72c70ed2ed --- /dev/null +++ b/combination-sum/robinyoon-dev.js @@ -0,0 +1,36 @@ +/** + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ +var combinationSum = function (candidates, target) { + + const result = []; + + function dfs(remainTarget, currentArray, currentIndex) { + + if (remainTarget < 0) { + return; + } + + if (remainTarget == 0) { + result.push([...currentArray]); + return; + } + + // 백트래킹 탐색 + for (let i = currentIndex; i < candidates.length; i++) { + currentArray.push(candidates[i]); + + dfs(remainTarget - candidates[i], currentArray, i); + + currentArray.pop(); + } + + } + + dfs(target, [], 0); + + return result; + +}; diff --git a/number-of-1-bits/robinyoon-dev.js b/number-of-1-bits/robinyoon-dev.js new file mode 100644 index 0000000000..a47d965f44 --- /dev/null +++ b/number-of-1-bits/robinyoon-dev.js @@ -0,0 +1,19 @@ +/** + * @param {number} n + * @return {number} + */ +var hammingWeight = function (n) { + let count = 0; + let tempN = n; + while (tempN != 0) { + if (tempN & 1) { + // 비트 마스크(& 1): 앞의 비트들은 모두 0으로 무시하고, 맨 끝자리 비트만 추출하여 검사. + count++; + } + tempN = tempN >>> 1; + // >>: 부호 유지 우측 이동 + // >>>: 부호 상관없이 0으로 채우는 우측 이동 + } + + return count; +}; diff --git a/valid-palindrome/robinyoon-dev.js b/valid-palindrome/robinyoon-dev.js new file mode 100644 index 0000000000..1f62f50254 --- /dev/null +++ b/valid-palindrome/robinyoon-dev.js @@ -0,0 +1,52 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function (s) { + + //NOTE: 다음에는 투 포인터 방식으로 불어보겠습니다... + + //0. 엣지케이스 대비: 빈칸인 경우. + if (s.trim() === '') { + return true; + } + + //1. s를 array로 변환 + const sArray = Array.from(s); + + // 알파벳만 남기는 작업 + // (Alphanumeric characters include letters and numbers.) + const aAscii = 'a'.charCodeAt(0); + const zAscii = 'z'.charCodeAt(0); + const aUpperAscii = 'A'.charCodeAt(0); + const zUpperAscii = 'Z'.charCodeAt(0); + const zeroAscii = '0'.charCodeAt(0); + const nineAscii = '9'.charCodeAt(0); + + const filteredArray = []; + for (let char of sArray) { + let charAscii = char.charCodeAt(0); + + let isCharacter = (charAscii >= aAscii && charAscii <= zAscii) || (charAscii >= aUpperAscii && charAscii <= zUpperAscii) || (charAscii >= zeroAscii && charAscii <= nineAscii); + + if (isCharacter) { + filteredArray.push(char); + } + } + + // 대문자 -> 소문자로 변경하는 작업 + const lowerArray = []; + for (let char of filteredArray) { + lowerArray.push(char.toLowerCase()); + } + + // reverse 해도 똑같은지 확인하는 작업 + const reversedArray = [...lowerArray].reverse(); + + const originalString = lowerArray.join(); + const reversedString = reversedArray.join(); + + return originalString === reversedString; + +}; +