Skip to content

[suwi] week 14 #1101

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Mar 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions binary-tree-level-order-traversal/sungjinwi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
"""
풀이 :
level을 인자로 함께 넘겨서 level에 해당하는 인덱스에 append

node 개수 N

TC : O(N)
모든 node에 대해 dfs호출

SC : O(N)
dfs 함수 호출 스택이 노드 개수 N만큼
"""

# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
ans = []

def dfs(node: Optional[TreeNode], level: int) -> None:
if not node :
return
if len(ans) < level + 1 :
ans.append([node.val])
else:
ans[level].append(node.val)
dfs(node.left, level + 1)
dfs(node.right, level + 1)

dfs(root, 0)

return ans
18 changes: 18 additions & 0 deletions counting-bits/sungjinwi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
"""
풀이 :
가장 낮은 자리의 비트를 제외한 dp의 성분 + 가장 낮은 자리 비트를 통해 dp 구현

n의 크기 : N

TC : O(N)

SC : O(N)
"""
class Solution:
def countBits(self, n: int) -> List[int]:
dp = [0] * (n + 1)

for num in range(1, n + 1):
dp[num] = dp[num >> 1] + (num & 1)

return dp
22 changes: 22 additions & 0 deletions house-robber-ii/sungjinwi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
"""
풀이 :
start를 포함하는 경우와 end를 포함하는 경우를 나눠서 dp 진행

nums의 갯수 N

TC : O(N)

SC : O(1)
"""

class Solution:
def rob(self, nums: List[int]) -> int:
if len(nums) == 1:
return nums[0]
prv1, cur1 = 0, 0
prv2, cur2 = 0, 0
for i in range(1, len(nums)):
prv1, cur1 = cur1, max(cur1, prv1 + nums[i])
for i in range(len(nums) - 1):
prv2, cur2 = cur2, max(cur2, prv2 + nums[i])
return max(cur1, cur2)