Skip to content

Commit d8e44f5

Browse files
authored
Merge pull request DaleStudy#2450 from sangbeenmoon/main
[sangbeenmoon] WEEK 03 solutions
2 parents 4f64510 + 872ccec commit d8e44f5

5 files changed

Lines changed: 98 additions & 0 deletions

File tree

combination-sum/sangbeenmoon.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# TC : O(2^target) 재귀 트리의 분기 수
2+
# SC : O(target/min(candidates)) 재귀 스택 깊이
3+
4+
class Solution:
5+
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
6+
self.answer = []
7+
for i in range(len(candidates)):
8+
self.go(i, candidates, [candidates[i]], candidates[i], target)
9+
10+
return self.answer
11+
12+
def go(self, i:int, candidates: List[int], nums: List[int], sum_: int, target: int):
13+
if sum_ == target:
14+
self.answer.append(nums.copy())
15+
16+
for j in range(i, len(candidates)):
17+
if candidates[j] + sum_ <= target:
18+
nums.append(candidates[j])
19+
self.go(j, candidates, nums, sum_ + candidates[j], target)
20+
nums.pop()

decode-ways/sangbeenmoon.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# idea
2+
# 마지막 두자리 수가 독립 가능 -> dp[i] = dp[i-1] + dp[i-2]
3+
# 마지막 한자리 수가 독립 가능 -> dp[i] = dp[i-1]
4+
# 위 두 케이스 모두 불가능 -> 0 반환
5+
# TC : O(n)
6+
# SC : O(n)
7+
8+
class Solution:
9+
def numDecodings(self, s: str) -> int:
10+
dp = [1] * len(s)
11+
12+
if s[0] == '0':
13+
return 0
14+
15+
if '1' <= s[0] and s[0] <= '9':
16+
dp[0] = 1
17+
18+
for i in range(1, len(s)):
19+
target = s[i-1:i+1]
20+
21+
if int(s[i]) != 0 and 10 <= int(target) and int(target) <= 26:
22+
dp[i] = dp[i-1] + dp[i-2]
23+
continue
24+
25+
if int(s[i]) == 0 and 10 <= int(target) and int(target) <= 26:
26+
dp[i] = dp[i-2]
27+
continue
28+
29+
target = s[i]
30+
if 1 <= int(target) and int(target) <= 9:
31+
dp[i] = dp[i-1]
32+
continue
33+
34+
return 0
35+
36+
return dp[len(s) - 1]

maximum-subarray/sangbeenmoon.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# 30분 내로 풀지 못함.
2+
# prefix sum 을 사용해서 풀어보려고 했으나 시간 초과.
3+
# dp 문제임을 파악할 수 있는 직관 필요...
4+
5+
class Solution:
6+
def maxSubArray(self, nums: List[int]) -> int:
7+
dp = [0] * len(nums)
8+
dp[0] = nums[0]
9+
for i in range(1, len(nums)):
10+
dp[i] = max(nums[i], nums[i] + dp[i-1])
11+
12+
return max(dp)

number-of-1-bits/sangbeenmoon.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def hammingWeight(self, n: int) -> int:
3+
cnt = 0
4+
while n > 0:
5+
if n % 2 == 1:
6+
cnt = cnt + 1
7+
n = n // 2
8+
print(n)
9+
return cnt

valid-palindrome/sangbeenmoon.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# TC : O(n)
2+
# SC : O(n)
3+
4+
class Solution:
5+
def isPalindrome(self, s: str) -> bool:
6+
refined_s = []
7+
8+
for ch in s:
9+
if 'a' <= ch and ch <= 'z' or ('0' <= ch and ch <= '9'):
10+
refined_s.append(ch)
11+
continue
12+
13+
if 'A' <= ch and ch <= 'Z':
14+
refined_s.append(ch.lower())
15+
16+
for i in range(len(refined_s)):
17+
j = len(refined_s) - i - 1
18+
if refined_s[i] != refined_s[j]:
19+
return False
20+
21+
return True

0 commit comments

Comments
 (0)