Skip to content

Commit d35cbae

Browse files
authored
Merge pull request #2404 from sangbeenmoon/main
[sangbeenmoon] WEEK 02 solutions
2 parents 552eb32 + 8a3b803 commit d35cbae

5 files changed

Lines changed: 119 additions & 0 deletions

File tree

3sum/sangbeenmoon.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# time : O(n^2)
2+
# space : O(n)
3+
class Solution:
4+
def threeSum(self, nums: list[int]) -> list[list[int]]:
5+
nums.sort()
6+
answer = []
7+
8+
for i, num in enumerate(nums):
9+
# 중복 제거
10+
if i > 0 and nums[i] == nums[i-1]:
11+
continue
12+
13+
target = num * -1
14+
15+
visited = dict() # 중복 제거
16+
left = i + 1
17+
right = len(nums) - 1
18+
19+
while left < right:
20+
sum_ = nums[left] + nums[right]
21+
if sum_ < target:
22+
left = left + 1
23+
elif sum_ > target:
24+
right = right - 1
25+
else:
26+
if nums[left] not in visited: # 중복 제거
27+
answer.append([num, nums[left], nums[right]])
28+
visited[nums[left]] = True
29+
30+
left = left + 1
31+
right = right - 1
32+
return answer

climbing-stairs/sangbeenmoon.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# dp[i] = dp[i-2] + dp[i-1]
2+
# time : O(n)
3+
# complexity : O(n)
4+
5+
class Solution:
6+
def climbStairs(self, n: int) -> int:
7+
dp = [0] * n
8+
dp[0] = 1
9+
if n == 1:
10+
return dp[0]
11+
dp[1] = 2
12+
for i in range(2, n):
13+
dp[i] = dp[i-2] + dp[i-1]
14+
15+
return dp[n-1]
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# idea
2+
# 1. left[i] = left[0] * left[1] * ... * left[i-1]
3+
# 2. right[i] = right[i+1] * right[i+2] * ... * right[n-1]
4+
# 3. answer[i] = left[i-1] * right[i+1]
5+
6+
# time : O(n)
7+
# space : O(n)
8+
9+
class Solution:
10+
def productExceptSelf(self, nums: List[int]) -> List[int]:
11+
left = [1] * len(nums)
12+
left[0] = nums[0]
13+
for i in range(1, len(nums)):
14+
left[i] = left[i-1] * nums[i]
15+
16+
right = [1] * len(nums)
17+
right[len(nums) - 1] = nums[len(nums) - 1]
18+
for i in range(len(nums) - 2, 0, -1):
19+
right[i] = right[i+1] * nums[i]
20+
21+
answer = []
22+
answer.append(right[1])
23+
for i in range(1, len(nums) - 1):
24+
answer.append(left[i-1] * right[i+1])
25+
answer.append(left[len(nums) - 2])
26+
return answer

valid-anagram/sangbeenmoon.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# time : O(nlogn)
2+
# space : O(n)
3+
4+
class Solution:
5+
def isAnagram(self, s: str, t: str) -> bool:
6+
return sorted(s) == sorted(t)
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# time: O(n)
2+
# space: O(h) : 추가 자료구조는 없지만 재귀 스택으로 인해 트리 높이만큼 공간 사용.
3+
4+
# Definition for a binary tree node.
5+
class TreeNode:
6+
def __init__(self, val=0, left=None, right=None):
7+
self.val = val
8+
self.left = left
9+
self.right = right
10+
11+
class Solution:
12+
answer = True
13+
def isValidBST(self, root: Optional[TreeNode]) -> bool:
14+
15+
if root:
16+
if root.left:
17+
self.go_left(root.left, -2**31 - 1, root.val )
18+
if root.right:
19+
self.go_right(root.right, root.val, 2**31)
20+
21+
return self.answer
22+
23+
def go_left(self, cur:TreeNode, mm:int, MM:int):
24+
if mm >= cur.val or cur.val >= MM :
25+
self.answer = False
26+
return
27+
if cur.left:
28+
self.go_left(cur.left, mm, cur.val)
29+
if cur.right:
30+
self.go_right(cur.right, cur.val, MM)
31+
32+
def go_right(self, cur:TreeNode, mm:int, MM:int):
33+
if mm >= cur.val or cur.val >= MM :
34+
self.answer = False
35+
return
36+
if cur.left:
37+
self.go_left(cur.left, mm, cur.val)
38+
if cur.right:
39+
self.go_right(cur.right, cur.val, MM)
40+

0 commit comments

Comments
 (0)