Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions combination-sum/sadie100.ts
Original file line number Diff line number Diff line change
@@ -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
}
14 changes: 14 additions & 0 deletions number-of-1-bits/sadie100.ts
Original file line number Diff line number Diff line change
@@ -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
}
23 changes: 23 additions & 0 deletions valid-palindrome/sadie100.ts
Original file line number Diff line number Diff line change
@@ -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
}
Loading