From f70016b4cd8979dd886a4684914619202003f570 Mon Sep 17 00:00:00 2001 From: sadie100 <03sadie@gmail.com> Date: Mon, 16 Mar 2026 20:43:21 +0900 Subject: [PATCH 1/3] sadie100: valid palindrome solution --- valid-palindrome/sadie100.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 valid-palindrome/sadie100.ts diff --git a/valid-palindrome/sadie100.ts b/valid-palindrome/sadie100.ts new file mode 100644 index 000000000..0258a1116 --- /dev/null +++ b/valid-palindrome/sadie100.ts @@ -0,0 +1,23 @@ +/* +s에서 알파벳과 숫자가 아닌 글자를 다 날리고, 스택에 문자를 절반까지 담은 후 절반 이후부터는 꺼내가며 앞뒤 레터가 일치하는지 확인한다 + +시간복잡도 : O(N) (N은 s의 길이) +공간복잡도 : O(N) (스택) +*/ + +function isPalindrome(s: string): boolean { + const newStr = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase() + const isStrEven = newStr.length % 2 === 0 + const lenHalf = Math.floor(newStr.length / 2) + const stack = [] + for (let i = 0; i < newStr.length; i++) { + if (i < lenHalf) { + stack.push(newStr[i]) + } else { + if (!isStrEven && i === lenHalf) continue + const isSame = newStr[i] === stack.pop() + if (!isSame) return false + } + } + return true +} From 0439ac7eaa2ddbb62990f8e7836f2322afa8b91b Mon Sep 17 00:00:00 2001 From: sadie100 <03sadie@gmail.com> Date: Tue, 17 Mar 2026 20:25:24 +0900 Subject: [PATCH 2/3] sadie100: number of 1 bits solution --- number-of-1-bits/sadie100.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 number-of-1-bits/sadie100.ts diff --git a/number-of-1-bits/sadie100.ts b/number-of-1-bits/sadie100.ts new file mode 100644 index 000000000..deb1a4af6 --- /dev/null +++ b/number-of-1-bits/sadie100.ts @@ -0,0 +1,14 @@ +/** +n을 이진수 변환하고 1의 개수를 센다 + +시간복잡도 O(N) (N은 숫자 n의 비트 개수) + */ + +function hammingWeight(n: number): number { + const binaryNum = n.toString(2) + let result = 0 + for (let char of binaryNum) { + if (char === '1') result += 1 + } + return result +} From af27ccbea93050fbcce75f65f7c17f9e3069520d Mon Sep 17 00:00:00 2001 From: sadie100 <03sadie@gmail.com> Date: Wed, 18 Mar 2026 18:47:29 +0900 Subject: [PATCH 3/3] sadie100: combination sum solution --- combination-sum/sadie100.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 combination-sum/sadie100.ts diff --git a/combination-sum/sadie100.ts b/combination-sum/sadie100.ts new file mode 100644 index 000000000..97f4afc9e --- /dev/null +++ b/combination-sum/sadie100.ts @@ -0,0 +1,28 @@ +/* +dfs로 각 candidates를 돌면서 target과 같아지는 순간에 result를 반환한다. + +같은 조합이 중복됨을 피하기 위해 candidates를 정렬하고, 각 숫자보다 크거나 같은 candidate만 탐색한다. + +시간복잡도 : O(N^(T/min(c))) - N은 candidates의 수, T는 타겟, c는 candidates. +타겟을 candidates의 최소값으로 나눈 값이 최대 깊이이므로 최악의 경우 해당 횟수만큼 반복해서 배열을 탐색함 +*/ + +function combinationSum(candidates: number[], target: number): number[][] { + candidates.sort((a, b) => a - b) + const result = [] + const search = (idx, nums, sum) => { + if (sum === target) { + result.push(nums) + return + } + for (let i = idx; i < candidates.length; i++) { + const num = candidates[i] + if (sum + num > target) return + search(i, [...nums, num], sum + num) + } + } + + search(0, [], 0) + + return result +}