Skip to content

Commit 9c2b45f

Browse files
authored
Merge pull request #708 from jungsiroo/main
[jungsiroo] Week2
2 parents 3df130c + 6ac686f commit 9c2b45f

File tree

4 files changed

+115
-0
lines changed

4 files changed

+115
-0
lines changed

3sum/jungsiroo.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution:
2+
def threeSum(self, nums: List[int]) -> List[List[int]]:
3+
# Naive Solution
4+
# Tc : O(n^3) / Sc : O(nC_3)
5+
6+
n = len(nums)
7+
"""
8+
for i in range(n-2):
9+
for j in range(i+1,n-1):
10+
for k in range(j+1, n):
11+
if nums[i]+nums[j]+nums[k] == 0:
12+
ret.add(tuple(sorted([nums[i], nums[j], nums[k]])))
13+
14+
ret = [x for x in ret]
15+
return ret
16+
"""
17+
18+
# Better Solution
19+
# two-sum question with fixed num (traversal in for loop)
20+
# Tc : O(n^2) / Sc : O(n)
21+
ret = []
22+
nums.sort()
23+
24+
for i in range(n):
25+
if i>0 and nums[i] == nums[i-1]:
26+
continue
27+
j, k = i+1, n-1
28+
29+
while j < k:
30+
sum_ = nums[i] + nums[j] + nums[k]
31+
if sum_ < 0 : j += 1
32+
elif sum_ > 0 : k -= 1
33+
else:
34+
ret.append([nums[i], nums[j], nums[k]])
35+
j += 1
36+
37+
while nums[j] == nums[j-1] and j<k:
38+
j += 1
39+
40+
return ret
41+

climbing-stairs/jungsiroo.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def climbStairs(self, n: int) -> int:
3+
"""
4+
dynamic programming
5+
dp[0] = 1
6+
dp[1] = 1
7+
dp[2] = dp[0] + dp[1] = 2
8+
dp[3] = dp[1] + dp[2] = 3
9+
...
10+
11+
Tc = O(n) / Sc = O(n)
12+
"""
13+
14+
dp = [1 for _ in range(n+1)]
15+
for i in range(2, n+1):
16+
dp[i] = dp[i-2] + dp[i-1]
17+
return dp[n]
18+

decode-ways/jungsiroo.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution:
2+
def numDecodings(self, s: str) -> int:
3+
"""
4+
dp 이용 : 가능한 경우의 수를 구해놓고 그 뒤에 붙을 수 있는가?
5+
ex) 1234
6+
(1,2) -> (1,2,3)
7+
(12) -> (12,3)
8+
(1) -> (1,23)
9+
10+
Tc : O(n) / Sc : O(n)
11+
"""
12+
if s[0] == '0': return 0
13+
14+
n = len(s)
15+
dp = [0]*(n+1)
16+
dp[0] = dp[1] = 1
17+
18+
for i in range(2, n+1):
19+
one = int(s[i-1])
20+
two = int(s[i-2:i])
21+
22+
if 1<=one<=9: dp[i] += dp[i-1]
23+
if 10<=two<=26 : dp[i] += dp[i-2]
24+
25+
return dp[n]
26+

valid-anagram/jungsiroo.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution:
2+
def isAnagram(self, s: str, t: str) -> bool:
3+
if len(s) != len(t):
4+
return False
5+
6+
# sort and compare
7+
# Tc : O(nlogn) / Sc : O(n)(Because of python timsort)
8+
"""
9+
s = sorted(s)
10+
t = sorted(t)
11+
for s_char, t_char in zip(s, t):
12+
if s_char != t_char:
13+
return False
14+
return True
15+
"""
16+
17+
# dictionary to count letters
18+
# Tc : O(n) / Sc : O(n)
19+
letters_cnt = dict()
20+
INF = int(1e6)
21+
for s_char in s:
22+
letters_cnt[s_char] = letters_cnt.get(s_char,0)+1
23+
24+
for t_char in t:
25+
letters_cnt[t_char] = letters_cnt.get(t_char,INF)-1
26+
if letters_cnt[t_char] < 0:
27+
return False
28+
29+
return sum(letters_cnt.values()) == 0
30+

0 commit comments

Comments
 (0)