Skip to content
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
46 changes: 46 additions & 0 deletions maximum-depth-of-binary-tree/socow.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@

class Solution:
def maxDepth(self, root: Optional['TreeNode']) -> int:
"""
문제
- 이진트리의 최대 깊이를 구하라.

아이디어 (재귀 DFS)
- 공집합(None)의 깊이는 0
- 현재 노드 깊이 = max(왼쪽 서브트리 깊이, 오른쪽 서브트리 깊이) + 1

시간복잡도: O(n) — 각 노드를 한 번씩 방문
공간복잡도: O(h) — 재귀 스택(h는 트리 높이; 최악 O(n), 평균 O(log n))
"""
# 1) 빈 트리이면 깊이 0
if not root:
return 0

# 2) 왼쪽/오른쪽 서브트리의 최대 깊이를 구한다
left_depth = self.maxDepth(root.left)
right_depth = self.maxDepth(root.right)

# 3) 현재 노드의 깊이 = 더 큰 서브트리 깊이 + 1(현재 노드 포함)
return max(left_depth, right_depth) + 1
# dfs(3) - 왼쪽으로 이동
# dfs(9) - 왼쪽으로 이동
# dfs(None) -> 0
# dfs(9) - 오른쪽으로 이동
# dfs(None) -> 0
# dfs(9) 반환: max(0,0)+1 = 1
# dfs(3) - 오른쪽으로 이동
# dfs(20) - 왼쪽으로 이동
# dfs(15) - 왼쪽으로 이동
# dfs(None) -> 0
# dfs(15) - 오른쪽으로 이동
# dfs(None) -> 0
# dfs(15) 반환: max(0,0)+1 = 1
# dfs(20) - 오른쪽으로 이동
# dfs(7) - 왼쪽으로 이동
# dfs(None) -> 0
# dfs(7) - 오른쪽으로 이동
# dfs(None) -> 0
# dfs(7) 반환: max(0,0)+1 = 1
# dfs(20) 반환: max(1,1)+1 = 2
# dfs(3) 반환: max(1,2)+1 = 3
# 최종 결과: 3
35 changes: 35 additions & 0 deletions merge-two-sorted-lists/socow.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""
문제 요약
- 정렬된 두 연결 리스트를 하나의 정렬된 리스트로 병합

아이디어
- dummy 노드로 시작점 고정
- 두 리스트 비교하며 작은 값을 연결
- 남은 리스트 한번에 연결

시간복잡도: O(n + m) - 두 리스트 길이의 합
공간복잡도: O(1) - 추가 공간 없이 포인터만 변경
"""


class Solution:
def mergeTwoLists(
self, list1: Optional[ListNode], list2: Optional[ListNode]
) -> Optional[ListNode]:
dummy = ListNode() # 가짜 시작 노드
node = dummy

# 두 리스트 비교하며 병합
while list1 and list2:
if list1.val < list2.val:
node.next = list1
list1 = list1.next
else:
node.next = list2
list2 = list2.next
node = node.next

# 남은 리스트 연결
node.next = list1 or list2

return dummy.next