From ce6a0f639da2b830d3d6567a0c703aabdcc9da42 Mon Sep 17 00:00:00 2001 From: Lyla Date: Mon, 3 Mar 2025 20:07:01 -0500 Subject: [PATCH 1/5] solve 1 --- meeting-rooms/pmjuu.py | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 meeting-rooms/pmjuu.py diff --git a/meeting-rooms/pmjuu.py b/meeting-rooms/pmjuu.py new file mode 100644 index 000000000..4ac03be00 --- /dev/null +++ b/meeting-rooms/pmjuu.py @@ -0,0 +1,52 @@ +''' +시간 복잡도: O(n log n) +공간 복잡도: O(1) +''' +import unittest +from typing import List + +class Interval(object): + def __init__(self, start, end): + self.start = start + self.end = end + +class Solution: + def can_attend_meetings(self, intervals: List[Interval]) -> bool: + intervals.sort(key=lambda x:x.start) + + for i in range(len(intervals) - 1): + if intervals[i + 1].start < intervals[i].end: + return False + + return True + +class TestCanAttendMeetings(unittest.TestCase): + def setUp(self): + self.solution = Solution() + + def test_case_1(self): + intervals = [Interval(0, 30), Interval(5, 10), Interval(15, 20)] + # self.assertFalse(self.solution.can_attend_meetings(intervals)) + + def test_case_2(self): + intervals = [Interval(5, 8), Interval(9, 15)] + self.assertTrue(self.solution.can_attend_meetings(intervals)) + + def test_case_3(self): + intervals = [] + # self.assertTrue(self.solution.can_attend_meetings(intervals)) + + def test_case_4(self): + intervals = [Interval(1, 5)] + # self.assertTrue(self.solution.can_attend_meetings(intervals)) + + def test_case_5(self): + intervals = [Interval(0, 5), Interval(5, 10), Interval(10, 15)] + self.assertTrue(self.solution.can_attend_meetings(intervals)) + + def test_case_6(self): + intervals = [Interval(1, 3), Interval(2, 6), Interval(8, 10)] + # self.assertFalse(self.solution.can_attend_meetings(intervals)) + +if __name__ == "__main__": + unittest.main() From 24726b840e6a7533dc495c8afcf8de9de2562bb1 Mon Sep 17 00:00:00 2001 From: Lyla Date: Thu, 6 Mar 2025 21:23:03 -0500 Subject: [PATCH 2/5] solve 2 --- .../pmjuu.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 lowest-common-ancestor-of-a-binary-search-tree/pmjuu.py diff --git a/lowest-common-ancestor-of-a-binary-search-tree/pmjuu.py b/lowest-common-ancestor-of-a-binary-search-tree/pmjuu.py new file mode 100644 index 000000000..d34e63f29 --- /dev/null +++ b/lowest-common-ancestor-of-a-binary-search-tree/pmjuu.py @@ -0,0 +1,22 @@ +''' +시간 복잡도: O(h) (h = 트리 높이) +공간 복잡도: O(1) +''' +# Definition for a binary tree node. +class TreeNode: + def __init__(self, x): + self.val = x + self.left = None + self.right = None + +class Solution: + def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': + node = root + + while node: + if p.val < node.val and q.val < node.val: + node = node.left + elif node.val < p.val and node.val < q.val: + node = node.right + else: + return node From f55206d745016ac794e6655a64ecb4a901163325 Mon Sep 17 00:00:00 2001 From: Lyla Date: Thu, 6 Mar 2025 21:23:12 -0500 Subject: [PATCH 3/5] solve 3 --- kth-smallest-element-in-a-bst/pmjuu.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 kth-smallest-element-in-a-bst/pmjuu.py diff --git a/kth-smallest-element-in-a-bst/pmjuu.py b/kth-smallest-element-in-a-bst/pmjuu.py new file mode 100644 index 000000000..32dcba550 --- /dev/null +++ b/kth-smallest-element-in-a-bst/pmjuu.py @@ -0,0 +1,25 @@ +''' +시간 복잡도: O(n) +공간 복잡도: O(n) +''' +from typing import Optional + +# 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: + def inorder_traversal(node): + if node: + inorder_traversal(node.left) + values.append(node.val) + inorder_traversal(node.right) + + values = [] + inorder_traversal(root) + + return values[k - 1] From b88a3df74900e08276a731c07f5a306db5a76e84 Mon Sep 17 00:00:00 2001 From: Lyla Date: Fri, 7 Mar 2025 13:58:49 -0500 Subject: [PATCH 4/5] remove comments --- meeting-rooms/pmjuu.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/meeting-rooms/pmjuu.py b/meeting-rooms/pmjuu.py index 4ac03be00..127f543ed 100644 --- a/meeting-rooms/pmjuu.py +++ b/meeting-rooms/pmjuu.py @@ -26,7 +26,7 @@ def setUp(self): def test_case_1(self): intervals = [Interval(0, 30), Interval(5, 10), Interval(15, 20)] - # self.assertFalse(self.solution.can_attend_meetings(intervals)) + self.assertFalse(self.solution.can_attend_meetings(intervals)) def test_case_2(self): intervals = [Interval(5, 8), Interval(9, 15)] @@ -34,11 +34,11 @@ def test_case_2(self): def test_case_3(self): intervals = [] - # self.assertTrue(self.solution.can_attend_meetings(intervals)) + self.assertTrue(self.solution.can_attend_meetings(intervals)) def test_case_4(self): intervals = [Interval(1, 5)] - # self.assertTrue(self.solution.can_attend_meetings(intervals)) + self.assertTrue(self.solution.can_attend_meetings(intervals)) def test_case_5(self): intervals = [Interval(0, 5), Interval(5, 10), Interval(10, 15)] @@ -46,7 +46,7 @@ def test_case_5(self): def test_case_6(self): intervals = [Interval(1, 3), Interval(2, 6), Interval(8, 10)] - # self.assertFalse(self.solution.can_attend_meetings(intervals)) + self.assertFalse(self.solution.can_attend_meetings(intervals)) if __name__ == "__main__": unittest.main() From 2610d48058b560d9e190f158055c536cc2760fb0 Mon Sep 17 00:00:00 2001 From: Lyla Date: Fri, 7 Mar 2025 15:32:39 -0500 Subject: [PATCH 5/5] solve 4 --- insert-interval/pmjuu.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 insert-interval/pmjuu.py diff --git a/insert-interval/pmjuu.py b/insert-interval/pmjuu.py new file mode 100644 index 000000000..ae51b0674 --- /dev/null +++ b/insert-interval/pmjuu.py @@ -0,0 +1,32 @@ +''' +시간 복잡도: O(n) +공간 복잡도: O(n) +''' +from typing import List + + +class Solution: + def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]: + n = len(intervals) + start, end = newInterval + i = 0 + result = [] + + # before merging + while i < n and intervals[i][1] < start: + result.append(intervals[i]) + i += 1 + + # merge + while i < n and intervals[i][0] <= end: + start = min(start, intervals[i][0]) + end = max(end, intervals[i][1]) + i += 1 + result.append([start, end]) + + # after merging + while i < n: + result.append(intervals[i]) + i += 1 + + return result