From 3a4d382383e20a1110e106fbed31970ffa7c8997 Mon Sep 17 00:00:00 2001 From: ChaedongIm Date: Wed, 5 Mar 2025 08:11:05 +0900 Subject: [PATCH] feat: [Week 13] --- kth-smallest-element-in-a-bst/Chaedie.py | 26 +++++++++++ .../Chaedie.py | 46 +++++++++++++++++++ meeting-rooms/Chaedie.py | 18 ++++++++ 3 files changed, 90 insertions(+) create mode 100644 kth-smallest-element-in-a-bst/Chaedie.py create mode 100644 lowest-common-ancestor-of-a-binary-search-tree/Chaedie.py create mode 100644 meeting-rooms/Chaedie.py diff --git a/kth-smallest-element-in-a-bst/Chaedie.py b/kth-smallest-element-in-a-bst/Chaedie.py new file mode 100644 index 000000000..6d6ff4647 --- /dev/null +++ b/kth-smallest-element-in-a-bst/Chaedie.py @@ -0,0 +1,26 @@ +""" +Solution: + 1) preOrder Traversal + 2) k 번쨰 요소 return + +Time: O(n) +Space: O(n) + +""" + + +class Solution: + def kthSmallest(self, root: Optional[TreeNode], k: int) -> int: + arr = [] + + def dfs(node): + if not node: + return + + dfs(node.left) + arr.append(node.val) + dfs(node.right) + + dfs(root) + + return arr[k - 1] diff --git a/lowest-common-ancestor-of-a-binary-search-tree/Chaedie.py b/lowest-common-ancestor-of-a-binary-search-tree/Chaedie.py new file mode 100644 index 000000000..11de747aa --- /dev/null +++ b/lowest-common-ancestor-of-a-binary-search-tree/Chaedie.py @@ -0,0 +1,46 @@ +""" +Solution: + BST 의 특징을 이용해 풀이할 예정이다. + 1) cur.val 보다 p.val, q.val 이 작으면 왼쪽 트리에 LCA 가 있다. + 2) cur.val 보다 p.val, q.val 이 크면 오른쪽 트리에 LCA 가 있다. + 3) 나머지 케이스는 본인이 LCA 이다. + +Time: O(log(n)) +Space: O(1) + +""" + + +class Solution: + def lowestCommonAncestor( + self, root: "TreeNode", p: "TreeNode", q: "TreeNode" + ) -> "TreeNode": + + cur = root + while cur: + if p.val < cur.val and q.val < cur.val: + cur = cur.left + elif cur.val < p.val and cur.val < q.val: + cur = cur.right + else: + return cur + + +""" +Solution: 재귀 +Time: O(log(n)) +Space: O(log(n)) +""" + + +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) + elif p.val > root.val and q.val > root.val: + return self.lowestCommonAncestor(root.right, p, q) + else: + return root diff --git a/meeting-rooms/Chaedie.py b/meeting-rooms/Chaedie.py new file mode 100644 index 000000000..da34c2edb --- /dev/null +++ b/meeting-rooms/Chaedie.py @@ -0,0 +1,18 @@ +""" +Solution: + 1) 정렬 + 2) prev endTime 이 cur startTime 보다 큰 경우가 있으면 return False +Time: O(n) +Space: O(1) +""" + + +class Solution: + def canAttendMeetings(self, intervals: List[List[int]]) -> bool: + intervals.sort() + + for i in range(1, len(intervals)): + if intervals[i - 1][1] > intervals[i][0]: + return False + + return True