Skip to content

Commit 19e94c7

Browse files
authored
Merge pull request #2070 from changhyumm/main
[changhyumm] WEEK 02 solutions
2 parents 9c8fe48 + 489033d commit 19e94c7

File tree

4 files changed

+93
-0
lines changed

4 files changed

+93
-0
lines changed

3sum/changhyumm.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Solution:
2+
def threeSum(self, nums: List[int]) -> List[List[int]]:
3+
# ans = set()
4+
# for i in range(len(n)):
5+
# seen = {}
6+
# for j in range(i+1, len(n)):
7+
# complement = -(nums[i] + nums[j])
8+
# if complement in seen:
9+
# ans.add(tuple(sorted([nums[i], nums[j], complement])))
10+
# seen[nums[j]] = j
11+
# return [list(triplet) for triplet in ans]
12+
# hash + 이중 loop -> O(n^2)
13+
14+
15+
## 투포인터 활용
16+
# sort + loop -> O(nlogn)
17+
ans_set = set()
18+
nums.sort()
19+
for i in range(len(nums)):
20+
l = i + 1
21+
r = len(nums) - 1
22+
while l < r:
23+
total = nums[i] + nums[l] + nums[r]
24+
if total < 0:
25+
l += 1
26+
elif total > 0:
27+
r -= 1
28+
else:
29+
# 중복제거
30+
ans_set.add((nums[i], nums[l], nums[r]))
31+
l += 1
32+
r -= 1
33+
return list(ans_set)

climbing-stairs/changhyumm.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def climbStairs(self, n: int) -> int:
3+
if n <= 1:
4+
return 1
5+
dp = [0] * n
6+
print(dp)
7+
dp[0] = 1
8+
dp[1] = 2
9+
10+
for i in range(2, n):
11+
dp[i] = dp[i-2] + dp[i-1]
12+
return dp[-1]
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution:
2+
def productExceptSelf(self, nums: List[int]) -> List[int]:
3+
# ans = [1] * len(nums)
4+
# for i in range(len(nums)):
5+
# for j in range(len(nums)):
6+
# if i != j:
7+
# ans[i] = ans[i] * nums[j]
8+
# return ans
9+
# 시간복잡도를 줄이기 위해서 이중루프를 안쓰는 방법으로
10+
left = [1] * len(nums)
11+
right = [1] * len(nums)
12+
for i in range(len(nums) - 1):
13+
left[i+1] = left[i] * nums[i]
14+
print(left)
15+
for j in range(len(nums) - 1, 0, -1):
16+
right[j-1] = right[j] * nums[j]
17+
print(right)
18+
19+
answer = []
20+
for k in range(len(left)):
21+
answer.append(left[k]*right[k])
22+
return answer

valid-anagram/changhyumm.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution:
2+
def isAnagram(self, s: str, t: str) -> bool:
3+
if len(s) != len(t):
4+
return False
5+
# sorted_s = sorted(s)
6+
# sorted_t = sorted(t)
7+
# for i in range(len(s)):
8+
# if sorted_s[i] != sorted_t[i]:
9+
# return False
10+
# return True
11+
# 시간복잡도가 O(nlog(n))
12+
13+
# Hashmap 사용하는 방법으로 변경
14+
counter = {}
15+
for char in s:
16+
counter[char] = counter.get(char, 0) + 1
17+
for char in t:
18+
if char in counter and counter[char] != 0:
19+
counter[char] -= 1
20+
elif char in counter and counter[char] == 0:
21+
return False
22+
else:
23+
return False
24+
# 시간복잡도 O(n)
25+
# 공간복잡도 O(n)
26+
return True

0 commit comments

Comments
 (0)