Skip to content

Commit 81cf5b5

Browse files
authored
Merge pull request #1802 from wozlsla/main
[wozlsla] WEEK 03 solutions
2 parents a06d1d9 + 7e53ec1 commit 81cf5b5

File tree

4 files changed

+229
-0
lines changed

4 files changed

+229
-0
lines changed

โ€Žcombination-sum/wozlsla.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
"""
2+
# Intuition
3+
์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋Š” ์กฐํ•ฉ?
4+
5+
# Approach
6+
- X
7+
"""
8+
9+
10+
class Solution:
11+
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
12+
13+
result, nums = [], []
14+
15+
def dfs(start, total):
16+
17+
# ๊ธฐ์ €์กฐ๊ฑด 1
18+
if total > target:
19+
return
20+
21+
# ๊ธฐ์ €์กฐ๊ฑด 2
22+
if total == target: # sum to target ์ฐพ์Œ
23+
result.append(nums[:]) # ๋ณต์‚ฌ๋ณธ ์ถ”๊ฐ€
24+
25+
for i in range(start, len(candidates)):
26+
num = candidates[i]
27+
nums.append(num)
28+
dfs(i, total + num)
29+
nums.pop()
30+
31+
# ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ
32+
dfs(0, 0)
33+
34+
return result

โ€Žmaximum-subarray/wozlsla.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
"""
2+
# Intuition
3+
- X
4+
# Approach
5+
- X
6+
"""
7+
8+
9+
class Solution:
10+
def maxSubArray(self, nums: List[int]) -> int:
11+
12+
max_total = nums[0]
13+
14+
for i in range(len(nums)): # O(N)
15+
for j in range(i, len(nums)): # O(N)
16+
17+
max_total = max(sum(nums[i : j + 1]), max_total) # O(N)
18+
19+
return max_total

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

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
"""
2+
# Intuition
3+
์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ ํ›„ 1 ์„ธ๊ธฐ
4+
5+
# Approach
6+
n % 2 (๋‚˜๋จธ์ง€)๊ฐ€ 1์ด๋ฉด cnt += 1
7+
8+
# Complexity
9+
- Time complexity : O(logN)
10+
- 10์ง„์ˆ˜ n์„ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ ๋น„ํŠธ์˜ ๊ฐœ์ˆ˜๋Š” log2(n)์— ๋น„๋ก€. ๋”ฐ๋ผ์„œ ์ด ๋ฃจํ”„๋Š” ์•ฝ log2(n)๋ฒˆ ๋ฐ˜๋ณต
11+
- Space complexity : O(N)
12+
- bin(n) ํ•จ์ˆ˜๋Š” n์˜ 2์ง„์ˆ˜ ํ‘œํ˜„์„ ๋‹ด๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ƒ์„ฑ. ์ด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” logn์— ๋น„๋ก€ : O(logN)
13+
"""
14+
15+
16+
class Solution:
17+
def hammingWeight(self, n: int) -> int:
18+
19+
cnt = 0
20+
21+
while n > 0:
22+
cnt += n % 2
23+
n //= 2
24+
25+
# if n % 2 == 1:
26+
# cnt += 1
27+
# n = n // 2
28+
29+
return cnt
30+
31+
32+
"""
33+
class Solution:
34+
def hammingWeight(self, n: int) -> int:
35+
36+
# return bin(n).count("1")
37+
38+
cnt = 0
39+
40+
for b in bin(n):
41+
if b == 1:
42+
cnt += 1
43+
44+
return cnt
45+
"""
46+
47+
sol = Solution()
48+
print(sol.hammingWeight(11))

โ€Žvalid-palindrome/wozlsla.py

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
"""
2+
# Intuition
3+
์†Œ๋ฌธ์ž ๋ณ€ํ™˜, ์˜์ˆซ์ž ์ œ์™ธํ•œ ๋ฌธ์ž ์ œ๊ฑฐ
4+
reverse์™€ ๋น„๊ต
5+
6+
# Approach
7+
1. non-alphanumeric(isalpha/isnum or ์ •๊ทœ์‹) ์ผ ๋•Œ
8+
2. lower()
9+
3. ์œ„ ๊ฐ์ฒด๋ฅผ ๋น„๊ต
10+
11+
- chars = "" ์™€ ๊ฐ™์ด
12+
๋นˆ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉฐ chars += char ํ˜•ํƒœ๋กœ ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•˜๋ฉด, ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ๋น„์šฉ์ด ํผ.
13+
-> ๋ฆฌ์ŠคํŠธ์— ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•œ ๋’ค, ๋งˆ์ง€๋ง‰์— "".join() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
14+
15+
# Complexity
16+
- Time complexity : O(N)
17+
- Space complexity : O(N)
18+
"""
19+
20+
21+
class Solution:
22+
def isPalindrome(self, s: str) -> bool:
23+
24+
chars = []
25+
26+
for char in s:
27+
if char.isalnum():
28+
chars.append(char.lower())
29+
30+
result = "".join(chars)
31+
32+
# list comprehension
33+
# chars = "".join([char.lower() for char in s if char.isalnum()])
34+
35+
return result == result[::-1]
36+
37+
38+
sol = Solution()
39+
s = "A man, a plan, a canal: Panama"
40+
41+
print(sol.isPalindrome(s))
42+
43+
44+
# Pointer : O(1)
45+
class Solution:
46+
def isPalindrome(self, s: str) -> bool:
47+
48+
left, right = 0, len(s) - 1
49+
50+
while left < right:
51+
52+
if not s[left].isalnum():
53+
left += 1
54+
continue
55+
if not s[right].isalnum():
56+
right -= 1
57+
continue
58+
59+
# while left < right and not s[left].isalnum():
60+
# left += 1
61+
# while left < right and not s[right].isalnum():
62+
# left -= 1
63+
64+
if s[left].lower() != s[right].lower():
65+
return False
66+
67+
left += 1
68+
right -= 1
69+
70+
return True
71+
72+
73+
""" ์ „์ฒ˜๋ฆฌ ํ•„์š”ํ•จ
74+
class Solution:
75+
def isPalindrome(self, s: str) -> bool:
76+
77+
chars = re.sub(r'[^a-zA-Z0-9]', '', s).lower()
78+
79+
for i in range(len(chars)//2):
80+
left = chars[i]
81+
right = chars[len(chars) - 1 - i]
82+
83+
if left != right:
84+
return False
85+
86+
return True
87+
"""
88+
89+
""" ์ •๊ทœ์‹
90+
import re
91+
92+
class Solution:
93+
def isPalindrome(self, s: str) -> bool:
94+
95+
chars = re.sub(r'[^a-zA-Z0-9]', '', s).lower()
96+
97+
return chars == chars[::-1]
98+
"""
99+
100+
"""
101+
# non-alphanumeric
102+
- isalpha()
103+
- ๋ฌธ์ž์—ด์ด ๋ชจ๋‘ ์•ŒํŒŒ๋ฒณ(์˜๋ฌธ)์œผ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
104+
- ํ•œ๊ธ€, ์ผ๋ณธ์–ด ๋“ฑ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๋ฌธ์ž๋„ ํฌํ•จ ('์•ˆ๋…•ํ•˜์„ธ์š”'.isalpha() โ†’ True)
105+
- ๊ณต๋ฐฑ, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž ํฌํ•จ X
106+
- isnumeric()
107+
- ๋ฌธ์ž์—ด์ด ๋ชจ๋‘ ์ˆซ์ž๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
108+
- ์ˆซ์ž๋Š” ๋‹จ์ˆœํžˆ ์•„๋ผ๋น„์•„ ์ˆซ์ž(0-9)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์œ ๋‹ˆ์ฝ”๋“œ ์ˆซ์ž(์˜ˆ: โ‘ , ยฒ, ํ•œ์ž ์ˆซ์ž)๋„ ํฌํ•จ ('โ‘ โ‘กโ‘ข'.isnumeric() โ†’ True)
109+
- ์†Œ์ˆ˜์ (.)์ด๋‚˜ ์Œ์ˆ˜ ๋ถ€ํ˜ธ(-)๋Š” ์ˆซ์ž๋กœ ๊ฐ„์ฃผํ•˜์ง€ X
110+
- isalnum()
111+
- isalpha()์™€ isnumeric()์˜ ์กฐ๊ฑด์„ ํ•ฉ์นœ ๊ฒƒ์œผ๋กœ, ๋ฌธ์ž์—ด์ด ๋ชจ๋‘ ์•ŒํŒŒ๋ฒณ ๋˜๋Š” ์ˆซ์ž๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
112+
113+
# ๊ฐ์ฒด ์—ญ์ˆœ
114+
- .reverse()
115+
- list ๊ฐ์ฒด์—๋งŒ ์‚ฌ์šฉ
116+
- ์›๋ณธ ์ˆ˜์ •, ๋ฐ˜ํ™˜๊ฐ’ None
117+
- reversed()
118+
- ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, ๋ฌธ์ž์—ด ๋“ฑ ๋ชจ๋“  iterable ๊ฐ์ฒด์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ
119+
- ์ƒˆ๋กœ์šด ์—ญ์ˆœ 'iterator' ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜, ์›๋ณธ ๊ฐ์ฒด ๋ณ€๊ฒฝ X
120+
- ๋ฐ˜ํ™˜๋œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ ๋“ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•จ. ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ์œ ์šฉ
121+
- ์Šฌ๋ผ์ด์‹ฑ [::-1]
122+
- ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, ๋ฌธ์ž์—ด ๋“ฑ ๋ชจ๋“  iterable ๊ฐ์ฒด์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ
123+
- ์›๋ณธ์„ ๋ณต์‚ฌํ•˜์—ฌ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜, ์›๋ณธ ๊ฐ์ฒด ๋ณ€๊ฒฝ X
124+
- ์›๋ณธ ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด reversed() ๋ณด๋‹ค ๋” ๋งŽ์„ ์ˆ˜ ์žˆ๋‹ค
125+
126+
* iterator
127+
๋ฐ์ดํ„ฐ์˜ ์ˆœ์ฐจ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ๊ฐ์ฒด์ผ ๋ฟ, ๊ทธ ์ž์ฒด๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋‹ด๊ณ  ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ๊ณผ ๊ฐ™์€ ์ง์ ‘์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋‹ค.
128+
"""

0 commit comments

Comments
ย (0)