From 207243e8f4ceb59372ca10ded15971539ec3036e Mon Sep 17 00:00:00 2001 From: Seoya0512 Date: Wed, 4 Feb 2026 16:31:46 +0900 Subject: [PATCH 1/5] feat: week13 - meeting rooms --- meeting-rooms/Seoya0512.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 meeting-rooms/Seoya0512.py diff --git a/meeting-rooms/Seoya0512.py b/meeting-rooms/Seoya0512.py new file mode 100644 index 0000000000..282e4473e2 --- /dev/null +++ b/meeting-rooms/Seoya0512.py @@ -0,0 +1,19 @@ +''' +Time Complexity: O(N log N) +- intervals.sort() 는 O(N log N) 소요 +- for loop 는 O(N) 소요 +- 전체적으로 O(N log N) + O(N) = O(N log N) + +Space Complexity: O(1) +- end_time, start_time 상수 변수 추가로 사용 +''' +def can_attend_meetings(self, intervals: List[Interval]) -> bool: + intervals.sort() + end_time = intervals[0][1] + + for i in range(1, len(intervals)): + start_time = intervals[i][0] + if end_time > start_time: + return False + end_time = intervals[i][1] + return True \ No newline at end of file From 2b2a9514c0f0dcf278f36086edb11a2df6cd76d5 Mon Sep 17 00:00:00 2001 From: Seoya0512 Date: Wed, 4 Feb 2026 17:48:37 +0900 Subject: [PATCH 2/5] feat: week13 - common LCA --- .../Seoya0512.py | 12 ++++++++++++ meeting-rooms/Seoya0512.py | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 lowest-common-ancestor-of-a-binary-search-tree/Seoya0512.py diff --git a/lowest-common-ancestor-of-a-binary-search-tree/Seoya0512.py b/lowest-common-ancestor-of-a-binary-search-tree/Seoya0512.py new file mode 100644 index 0000000000..de5bb29c1f --- /dev/null +++ b/lowest-common-ancestor-of-a-binary-search-tree/Seoya0512.py @@ -0,0 +1,12 @@ +''' +Time Complexity: O(H) +- H는 트리의 높이 +''' + +class Solution: + def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': + if p.val < root.val and q.val < root.val: + return self.lowestCommonAncestor(root.left, p, q) + if p.val > root.val and q.val > root.val: + return self.lowestCommonAncestor(root.right, p, q) + return root diff --git a/meeting-rooms/Seoya0512.py b/meeting-rooms/Seoya0512.py index 282e4473e2..e3b469ff24 100644 --- a/meeting-rooms/Seoya0512.py +++ b/meeting-rooms/Seoya0512.py @@ -16,4 +16,4 @@ def can_attend_meetings(self, intervals: List[Interval]) -> bool: if end_time > start_time: return False end_time = intervals[i][1] - return True \ No newline at end of file + return True From f345476fa53e145d481824d650b63774b9cff4d4 Mon Sep 17 00:00:00 2001 From: Seoya0512 Date: Thu, 5 Feb 2026 11:45:25 +0900 Subject: [PATCH 3/5] feat: week13 - kth smallest element --- kth-smallest-element-in-a-bst/Seoya0512.py | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 kth-smallest-element-in-a-bst/Seoya0512.py diff --git a/kth-smallest-element-in-a-bst/Seoya0512.py b/kth-smallest-element-in-a-bst/Seoya0512.py new file mode 100644 index 0000000000..e584657780 --- /dev/null +++ b/kth-smallest-element-in-a-bst/Seoya0512.py @@ -0,0 +1,31 @@ +''' +Time Complexity: O(N) +- dfs 함수가 모든 노드를 중위순회 방식으로 방문함므로 O(N) 소요 + +Space Complexity: O(N) +- aligned_arr 리스트에 모든 노드의 값을 저장하므로 O(N) 소요 +- 재귀 호출 스택이 최대 트리의 높이만큼 쌓일 수 있으므로 최악의 경우 O(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 kthSmallest(self, root: Optional[TreeNode], k: int) -> int: + aligned_arr = [] + + def dfs(node): + if not node: + return + dfs(node.left) + aligned_arr.append(node.val) + dfs(node.right) + + dfs(root) + + return aligned_arr[k - 1] + + \ No newline at end of file From 200d3e200a88bf4a3927f18a69a12681ca8ea739 Mon Sep 17 00:00:00 2001 From: Seoya0512 Date: Fri, 6 Feb 2026 15:25:21 +0900 Subject: [PATCH 4/5] feat: week13 - insert intervals --- insert-interval/Seoya0512.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 insert-interval/Seoya0512.py diff --git a/insert-interval/Seoya0512.py b/insert-interval/Seoya0512.py new file mode 100644 index 0000000000..8c03a72486 --- /dev/null +++ b/insert-interval/Seoya0512.py @@ -0,0 +1,27 @@ +''' +Time Complexity : O(N) +- newInterval을 삽입할 위치 탐색 O(N) +- Intervals 병합을 위해 for문으로 모든 구간을 순회 O(N) +- O(N) + O(N) = O(N) + +Space Complexity : O(N) +- output 리스트에 모든 구간을 저장 O(N) + +''' +class Solution: + def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]: + idx = 0 + while idx < len(intervals) and intervals[idx][0] < newInterval[0]: + idx +=1 + intervals.insert(idx, newInterval) # newInterval을 삽입할 위치 탐색 (O(N)) + + # Intervals 병합 + output = [intervals[0]] + for interval in intervals[1:]: + # 이전 구간과 겹치는 경우 + if output[-1][1] >= interval[0]: + output[-1][1] = max(output[-1][1], interval[1]) + else: + output.append(interval) + return output + \ No newline at end of file From 99f6168265043ac4034e13820d4d135163e1e4c7 Mon Sep 17 00:00:00 2001 From: Seoya0512 Date: Sat, 7 Feb 2026 17:41:20 +0900 Subject: [PATCH 5/5] fix: resolve error --- insert-interval/Seoya0512.py | 1 - kth-smallest-element-in-a-bst/Seoya0512.py | 2 -- 2 files changed, 3 deletions(-) diff --git a/insert-interval/Seoya0512.py b/insert-interval/Seoya0512.py index 8c03a72486..113447e329 100644 --- a/insert-interval/Seoya0512.py +++ b/insert-interval/Seoya0512.py @@ -24,4 +24,3 @@ def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[Lis else: output.append(interval) return output - \ No newline at end of file diff --git a/kth-smallest-element-in-a-bst/Seoya0512.py b/kth-smallest-element-in-a-bst/Seoya0512.py index e584657780..c90af8b43d 100644 --- a/kth-smallest-element-in-a-bst/Seoya0512.py +++ b/kth-smallest-element-in-a-bst/Seoya0512.py @@ -27,5 +27,3 @@ def dfs(node): dfs(root) return aligned_arr[k - 1] - - \ No newline at end of file