From 3a4d382383e20a1110e106fbed31970ffa7c8997 Mon Sep 17 00:00:00 2001
From: ChaedongIm <chaedong.im.dev@gmail.com>
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