From de1aca2fdc3e627c670d20464ff3b758c6eb359f Mon Sep 17 00:00:00 2001 From: hsskey Date: Mon, 14 Apr 2025 21:08:57 +0900 Subject: [PATCH 1/5] valid-palindrome solved --- valid-palindrome/hsskey.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 valid-palindrome/hsskey.js diff --git a/valid-palindrome/hsskey.js b/valid-palindrome/hsskey.js new file mode 100644 index 000000000..fc9eac1b6 --- /dev/null +++ b/valid-palindrome/hsskey.js @@ -0,0 +1,10 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isPalindrome = function(s) { + const cleanStr = s.toLowerCase().replace(/[^a-z0-9]/g, '') + const reversedStr = [...cleanStr].reverse().join('') + + return cleanStr === reversedStr +}; From 206553ef85c50a5d0b5def0c84d0da90a16f8e7a Mon Sep 17 00:00:00 2001 From: hsskey Date: Tue, 15 Apr 2025 22:00:23 +0900 Subject: [PATCH 2/5] number-of-1-bits solved --- number-of-1-bits/hsskey.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 number-of-1-bits/hsskey.js diff --git a/number-of-1-bits/hsskey.js b/number-of-1-bits/hsskey.js new file mode 100644 index 000000000..1a9dd9641 --- /dev/null +++ b/number-of-1-bits/hsskey.js @@ -0,0 +1,23 @@ +/** + * @param {number} n + * @return {number} + */ +var hammingWeight = function(n) { + function recursive(num) { + // 종료조건 + if(String(num) === '1') { + return '1' + } + // 재귀호출 + const q = Math.floor(num / 2) // 몫 + const r = num % 2 // 나머지 + const total = r + recursive(q) + + // 데이터 통합 + return total + } + const binaryString = recursive(n) + const result = [...binaryString].map(Number).reduce((a,b) => a + b, 0) + + return result +}; From d229ed7bee7b9862cddf50b3558769dd7b5b8aee Mon Sep 17 00:00:00 2001 From: hsskey Date: Wed, 16 Apr 2025 22:25:45 +0900 Subject: [PATCH 3/5] combination-sum solved --- combination-sum/hsskey.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 combination-sum/hsskey.js diff --git a/combination-sum/hsskey.js b/combination-sum/hsskey.js new file mode 100644 index 000000000..ca3260000 --- /dev/null +++ b/combination-sum/hsskey.js @@ -0,0 +1,29 @@ +/** + * @param {number[]} candidates + * @param {number} target + * @return {number[][]} + */ +var combinationSum = function(candidates, target) { + const result = [] + function backtrack(start, curr, sum) { + // 현재 합계가 타겟과 같으면 결과에 추가 + if(sum === target) { + result.push([...curr]) + } + + // 합계가 타겟을 초과하면 더 이상 진행하지 않음 + if(sum > target) { + return + } + + // 현재 인덱스부터 시작하여 모든 후보를 시도 + for(let i = start; i < candidates.length; i++) { + curr.push(candidates[i]) + // 같은 숫자를 여러 번 사용할 수 있으므로 i부터 다시 시작 + backtrack(i, curr, sum + candidates[i]) + curr.pop() + } + } + backtrack(0, [], 0) + return result +}; From 8377a001172dcc382829b4bd798d15a635999d9a Mon Sep 17 00:00:00 2001 From: hsskey Date: Thu, 17 Apr 2025 22:08:17 +0900 Subject: [PATCH 4/5] decode-ways solved --- decode-ways/hsskey.js | 53 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 decode-ways/hsskey.js diff --git a/decode-ways/hsskey.js b/decode-ways/hsskey.js new file mode 100644 index 000000000..131b32cef --- /dev/null +++ b/decode-ways/hsskey.js @@ -0,0 +1,53 @@ +/** + * @param {string} s + * @return {number} + */ +var numDecodings = function(s) { + if (s[0] === '0') return 0; + + let count = 0; + const memo = {}; + + function backtrack(index, curr) { + // 기저 조건: 문자열 끝까지 왔으면 유효한 디코딩 발견 + if (index === s.length) { + count++; + return; + } + + // 메모이제이션 키 생성 + const key = index; + if (memo[key] !== undefined) { + count += memo[key]; + return; + } + + // 이전 카운트 저장 + const prevCount = count; + + // Case 1: 한 자리 숫자로 디코딩 (1~9) + if (s[index] !== '0') { + const oneDigit = s[index]; + curr.push(oneDigit); + backtrack(index + 1, curr); + curr.pop(); + } + + // Case 2: 두 자리 숫자로 디코딩 (10~26) + if (index + 1 < s.length) { + const twoDigit = s.substring(index, index + 2); + const num = parseInt(twoDigit); + if (num >= 10 && num <= 26) { + curr.push(twoDigit); + backtrack(index + 2, curr); + curr.pop(); + } + } + + // 현재 위치에서 발견한 디코딩 방법 수 저장 + memo[key] = count - prevCount; + } + + backtrack(0, []); + return count; +}; From 7a6e48051169a83cbafbd3fb385a2e2984a7e47e Mon Sep 17 00:00:00 2001 From: hsskey Date: Fri, 18 Apr 2025 21:38:24 +0900 Subject: [PATCH 5/5] maximum-subarray solved --- maximum-subarray/hsskey.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 maximum-subarray/hsskey.js diff --git a/maximum-subarray/hsskey.js b/maximum-subarray/hsskey.js new file mode 100644 index 000000000..115a93b7c --- /dev/null +++ b/maximum-subarray/hsskey.js @@ -0,0 +1,15 @@ +/** + * @param {number[]} nums + * @return {number} + */ +var maxSubArray = function(nums) { + let maxSum = -Infinity + let currentSum = 0 + + for(let num of nums) { + currentSum = Math.max(num, currentSum + num) + maxSum = Math.max(maxSum, currentSum) + } + + return maxSum +};