diff --git a/combination-sum/1lsang.ts b/combination-sum/1lsang.ts new file mode 100644 index 0000000000..09f9727c05 --- /dev/null +++ b/combination-sum/1lsang.ts @@ -0,0 +1,16 @@ +function combinationSum(candidates: number[], target: number): number[][] { + // arr: index까지 갈 수 있는 combinationSum + const arr:number[][][] = Array.from({ length: target + 1 }, () => [] as number[][]); + // 0을 만들 수 있는 방법은 숫자가 없는 것 + arr[0].push([] as number[]); + + for (const candidate of candidates) { + for (let n = candidate; n <= target; n++) { + for (const combination of arr[n-candidate]) { + arr[n].push([...combination, candidate]); + } + } + } + console.log(arr); + return arr[target]; +}; diff --git a/number-of-1-bits/1lsang.ts b/number-of-1-bits/1lsang.ts new file mode 100644 index 0000000000..241fa4279c --- /dev/null +++ b/number-of-1-bits/1lsang.ts @@ -0,0 +1,18 @@ +function hammingWeight(n: number): number { + // 최대 이진수 찾기 + let s = 1; + while (s*2 <= n) { + s*=2; + } + + // bit 세기 + let cnt = 0; + while (n > 0) { + if (n - s >= 0) { + n -= s; + cnt++; + } + s /= 2; + } + return cnt; +}; diff --git a/valid-palindrome/1lsang.ts b/valid-palindrome/1lsang.ts new file mode 100644 index 0000000000..26d83ee75d --- /dev/null +++ b/valid-palindrome/1lsang.ts @@ -0,0 +1,26 @@ +function isPalindrome(s: string): boolean { + // console.log('A'.charCodeAt(0), 'Z'.charCodeAt(0)); // 65 90 + // console.log('a'.charCodeAt(0), 'z'.charCodeAt(0)); // 97 122 + // console.log('0'.charCodeAt(0), '9'.charCodeAt(0)); // 48 57 + + // 문자열 변환 과정 + let converted = '' + for (let c of s) { + const charCode = c.charCodeAt(0); + if (charCode >= 65 && charCode <= 90) { + converted += c.toLowerCase(); + } + else if ((charCode >= 97 && charCode <= 122) || (charCode >= 48 && charCode <= 57)) { + converted += c; + } + } + + // palindrome 판단 조건 + const length = converted.length; + + for (let i = 0; i < length/2; i ++) { + if (converted[i] !== converted[length - 1 - i]) return false; + } + + return true; +};