Skip to content

Commit 41df393

Browse files
authored
Merge pull request #2097 from ZetBe/main
[ZetBe] WEEK 03 solutions
2 parents 10e9abd + 9939e5c commit 41df393

File tree

5 files changed

+208
-0
lines changed

5 files changed

+208
-0
lines changed

โ€Žcombination-sum/ZetBe.pyโ€Ž

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'''
2+
๋ฌธ์ œ: target์ด ๋  ๋•Œ๊นŒ์ง€ candidates์˜ ์ˆ˜๋ฅผ ๋”ํ•˜๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ๊ตฌํ•˜๋ผ.
3+
ํ’€์ด: ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์ด์šฉํ•˜์—ฌ ์กฐํ•ฉ์„ ๊ตฌํ•œ๋‹ค. ๋งŒ์•ฝ ํ˜„์žฌ ํ•ฉ์ด target๊ณผ ๊ฐ™๋‹ค๋ฉด ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ณ , ์ž‘๋‹ค๋ฉด ํ›„๋ณด๊ตฐ์„ ์ˆœํšŒํ•˜๋ฉฐ ์žฌ๊ท€์ ์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.
4+
์‹œ๊ฐ„๋ณต์žก๋„: O(N^T), N์€ ํ›„๋ณด๊ตฐ์˜ ์ˆ˜, T๋Š” target์˜ ๊ฐ’
5+
์ตœ์•…์˜ ๊ฒฝ์šฐ, ํ›„๋ณด๊ตฐ์˜ ์ˆ˜ N๊ณผ target์˜ ๊ฐ’ T์— ๋”ฐ๋ผ ๋ชจ๋“  ์กฐํ•ฉ์„ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N^T)์ด๋‹ค.
6+
๊ณต๊ฐ„๋ณต์žก๋„: O(T)
7+
์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ๊ณผ ํ˜„์žฌ ์กฐํ•ฉ์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์ตœ๋Œ€ T๊ฐœ์˜ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(T)์ด๋‹ค.
8+
์‚ฌ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ: ๋ฆฌ์ŠคํŠธ
9+
์ฐธ๊ณ ๋กœ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๊นŠ์ด๋Š” target/min(candidates)๋กœ ์ œํ•œ๋œ๋‹ค.
10+
'''
11+
12+
13+
class Solution:
14+
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
15+
candidates.sort()
16+
s, now = [], []
17+
18+
def find(start, score):
19+
if score == target:
20+
s.append(now[:])
21+
elif score < target:
22+
for i in range(start, len(candidates)):
23+
n = candidates[i]
24+
now.append(n)
25+
find(i, score+n)
26+
now.pop()
27+
find(0, 0)
28+
return s
29+
30+

โ€Ždecode-ways/ZetBe.pyโ€Ž

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
'''
2+
๋ฌธ์ œ: ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋””์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ(์—ฌ๊ธฐ์„œ 1์€ 'A', 2๋Š” 'B', ..., 26์€ 'Z'์— ํ•ด๋‹น).
3+
ํ’€์ด: ๋™์  ๊ณ„ํš๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์œ„์น˜๊นŒ์ง€์˜ ๋””์ฝ”๋”ฉ ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐ
4+
1. dp[i]๋ฅผ ๋ฌธ์ž์—ด์˜ i๋ฒˆ์งธ ๋ฌธ์ž๊นŒ์ง€ ๋””์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ผ๊ณ  ์ •์˜
5+
2. ๋ฌธ์ž์—ด์˜ i๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ '0'์ธ ๊ฒฝ์šฐ, ์ด์ „ ๋ฌธ์ž๊ฐ€ '1' ๋˜๋Š” '2'์ธ ๊ฒฝ์šฐ์—๋งŒ ์œ ํšจํ•œ ๋””์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ dp[i] = dp[i-2]
6+
3. ๋ฌธ์ž์—ด์˜ i๋ฒˆ์งธ ๋ฌธ์ž์™€ ์ด์ „ ๋ฌธ์ž๋ฅผ ํ•ฉ์ณ์„œ 10~26 ์‚ฌ์ด์˜ ์ˆซ์ž๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ, dp[i] = dp[i-1] + dp[i-2]
7+
4. ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” dp[i] = dp[i-1]
8+
์‹œ๊ฐ„๋ณต์žก๋„: O(n)
9+
๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉฐ dp ๋ฐฐ์—ด์„ ์ฑ„์šฐ๋ฏ€๋กœ ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
10+
๊ณต๊ฐ„๋ณต์žก๋„: O(n)
11+
dp ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ „์ฒด ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
12+
์‚ฌ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ: ๋ฆฌ์ŠคํŠธ
13+
'''
14+
15+
16+
class Solution:
17+
def numDecodings(self, s: str) -> int:
18+
string = list(s)
19+
n = len(string)
20+
dp = [0 for i in range(n)]
21+
if string[0] == '0':
22+
return 0
23+
if n == 1:
24+
return 1
25+
if n == 2:
26+
if 11 <= int(s) <= 19 or 21 <= int(s) <= 26:
27+
return 2
28+
elif int(s) == 10 or int(s) == 20:
29+
return 1
30+
elif '0' in string:
31+
return 0
32+
else:
33+
return 1
34+
dp[0] = 1
35+
if string[1] == '0' and 3 <= int(string[0]):
36+
return 0
37+
if 11 <= int(string[0])*10 + int(string[1]) <= 19 or 21 <= int(string[0])*10 + int(string[1]) <= 26:
38+
dp[1] = 2
39+
else:
40+
dp[1] = 1
41+
42+
for i in range(2, n):
43+
if string[i] == '0' and (3 <= int(string[i-1]) or int(string[i-1]) == 0):
44+
return 0
45+
if 11 <= int(string[i-1])*10 + int(string[i]) <= 19 or 21 <= int(string[i-1])*10 + int(string[i]) <= 26:
46+
dp[i] = dp[i-2] + dp[i-1]
47+
elif int(string[i-1])*10 + int(string[i]) == 10 or int(string[i-1])*10 + int(string[i]) == 20:
48+
dp[i] = dp[i-2]
49+
else:
50+
dp[i] += dp[i-1]
51+
52+
return dp[n-1]
53+
54+
55+
'''
56+
๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฒŒ ํ’€์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ai์—๊ฒŒ ๊ฐ„๊ฒฐํ•œ ํ’€์ด๋ฅผ ์•Œ๋ ค๋‹ฌ๋ผํ•ด์„œ ๊ณต์œ ๋“œ๋ฆฝ๋‹ˆ๋‹ค
57+
58+
class Solution:
59+
def numDecodings(self, s: str) -> int:
60+
if not s or s[0] == '0':
61+
return 0
62+
63+
n = len(s)
64+
# dp[i] : s์˜ ์•ž i๊ธ€์ž๋ฅผ ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜
65+
dp = [0] * (n + 1)
66+
67+
# ์ดˆ๊ธฐ๊ฐ’ ์„ค์ • (๋นˆ ๋ฌธ์ž์—ด์€ 1๊ฐ€์ง€ ๋ฐฉ๋ฒ•, ์ฒซ ๊ธ€์ž๋Š” ์œ„์—์„œ 0์ฒดํฌ ํ–ˆ์œผ๋ฏ€๋กœ 1๊ฐ€์ง€)
68+
dp[0] = 1
69+
dp[1] = 1
70+
71+
for i in range(2, n + 1):
72+
# 1. ํ•œ ์ž๋ฆฌ ์ˆซ์ž ํ•ด์„ (1~9)
73+
# ํ˜„์žฌ ์ˆซ์ž(s[i-1])๊ฐ€ '0'์ด ์•„๋‹ˆ๋ฉด, ์ด์ „ ์ƒํƒœ(dp[i-1])๋ฅผ ๊ณ„์Šน
74+
if s[i-1] != '0':
75+
dp[i] += dp[i-1]
76+
77+
# 2. ๋‘ ์ž๋ฆฌ ์ˆซ์ž ํ•ด์„ (10~26)
78+
# ์ด์ „ ์ˆซ์ž์™€ ํ˜„์žฌ ์ˆซ์ž๋ฅผ ํ•ฉ์ณ์„œ 10~26 ์‚ฌ์ด๋ผ๋ฉด, ์ „์ „ ์ƒํƒœ(dp[i-2])๋ฅผ ๋”ํ•จ
79+
two_digit = int(s[i-2 : i])
80+
if 10 <= two_digit <= 26:
81+
dp[i] += dp[i-2]
82+
83+
return dp[n]
84+
'''
85+

โ€Žmaximum-subarray/ZetBe.pyโ€Ž

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
'''
2+
๋ฌธ์ œ: ์ตœ๋Œ€ ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
3+
ํ’€์ด:
4+
1. ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์ˆ˜๊ฐ€ ์Œ์ˆ˜์ธ ๊ฒฝ์šฐ, ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
5+
2. ๋ฐฐ์—ด์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์–‘์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ธ๋ฑ์Šค๋ฅผ ์ด๋™
6+
3. ์–‘์ˆ˜๊ฐ€ ๋‚˜์˜จ ์ดํ›„๋ถ€ํ„ฐ๋Š” ํ˜„์žฌ ํ•ฉ์ด ์–‘์ˆ˜์ธ ๋™์•ˆ์€ ๊ณ„์† ๋”ํ•˜๊ณ , ์Œ์ˆ˜๊ฐ€ ๋˜๋ฉด ๋‹ค์‹œ ์–‘์ˆ˜๋ฅผ ์ฐพ์Œ
7+
4. ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค ์ตœ๋Œ€ ํ•ฉ์„ ๊ฐฑ์‹ 
8+
์‹œ๊ฐ„๋ณต์žก๋„: O(n)
9+
๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉฐ ์ตœ๋Œ€ ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
10+
๊ณต๊ฐ„๋ณต์žก๋„: O(1)
11+
์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ „์ฒด ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.
12+
'''
13+
14+
15+
class Solution:
16+
def maxSubArray(self, nums: List[int]) -> int:
17+
n = len(nums)
18+
answ = 0
19+
if max(nums) <= 0:
20+
return max(nums)
21+
i = 0
22+
while nums[i] < 0:
23+
i += 1
24+
now = 0
25+
while i < n:
26+
if now > 0 and i < n:
27+
now += nums[i]
28+
i += 1
29+
else:
30+
while now <= 0 and i < n:
31+
now = nums[i]
32+
i += 1
33+
answ = max(answ, now)
34+
35+
return answ
36+

โ€Žnumber-of-1-bits/ZetBe.pyโ€Ž

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
'''
2+
๋ฌธ์ œ: ์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n์˜ ์ด์ง„ ํ‘œํ˜„์—์„œ 1์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
3+
ํ’€์ด: 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ ์ˆ˜๋“ค์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด๋‘๊ณ , n์—์„œ ํฐ ์ˆ˜๋ถ€ํ„ฐ ๋นผ๊ฐ€๋ฉฐ 1์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์ด
4+
์‹œ๊ฐ„๋ณต์žก๋„: O(log n)
5+
2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ ์ˆ˜๋“ค์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ O(log n)์ด ๊ฑธ๋ฆฌ๊ณ , n์—์„œ ํฐ ์ˆ˜๋ถ€ํ„ฐ ๋นผ๊ฐ€๋ฉฐ 1์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฐ๋„ O(log n)์ด ๊ฑธ๋ฆฌ๋ฏ€๋กœ ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(log n)์ด๋‹ค.
6+
๊ณต๊ฐ„๋ณต์žก๋„: O(log n)
7+
2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ ์ˆ˜๋“ค์„ ์ €์žฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ „์ฒด ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(log n)์ด๋‹ค.
8+
์‚ฌ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ: ๋ฆฌ์ŠคํŠธ
9+
'''
10+
11+
12+
class Solution:
13+
def hammingWeight(self, n: int) -> int:
14+
b = []
15+
now = 1
16+
answ = 0
17+
for i in range(35):
18+
b.append(now)
19+
now *= 2
20+
21+
num = n
22+
for i in range(34, -1, -1):
23+
if num >= b[i]:
24+
num -= b[i]
25+
answ += 1
26+
return answ
27+
28+

โ€Žvalid-palindrome/ZetBe.pyโ€Ž

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
'''
2+
๋ฌธ์ œ: ์œ ํšจํ•œ ํŒฐ๋ฆฐ๋“œ๋กฌ, ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ
3+
ํ’€์ด: ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†์ด ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž๋งŒ์„ ๊ณ ๋ คํ•˜์—ฌ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธ
4+
์‹œ๊ฐ„๋ณต์žก๋„: O(n)
5+
๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉฐ ์œ ํšจํ•œ ๋ฌธ์ž๋งŒ ์ถ”์ถœํ•˜๊ณ , ๋‹ค์‹œ ํ•œ๋ฒˆ ์ˆœํšŒํ•˜๋ฉฐ ํŒฐ๋ฆฐ๋“œ๋กฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋ฏ€๋กœ ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
6+
๊ณต๊ฐ„๋ณต์žก๋„: O(n)
7+
์œ ํšจํ•œ ๋ฌธ์ž๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ „์ฒด ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
8+
์‚ฌ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ: ๋ฆฌ์ŠคํŠธ
9+
'''
10+
11+
12+
class Solution:
13+
def isPalindrome(self, s: str) -> bool:
14+
string = []
15+
for i in s:
16+
if 65 <= ord(i) <= 90:
17+
string.append(i)
18+
elif 97 <= ord(i) <= 122:
19+
string.append(chr(ord(i)-32))
20+
elif 48 <= ord(i) <= 57:
21+
string.append(i)
22+
23+
24+
for i in range(len(string)):
25+
if string[i] != string[len(string)-1-i]:
26+
return False
27+
return True
28+
29+

0 commit comments

Comments
ย (0)