From ec3553ffff3cf5ae5e0d0635ac09288d02d04c74 Mon Sep 17 00:00:00 2001 From: vmop899 Date: Sat, 22 Feb 2025 23:42:28 +0900 Subject: [PATCH 1/6] FEAT : add solution (maximum-depth-of-binary-tree) --- maximum-depth-of-binary-tree/aa601.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 maximum-depth-of-binary-tree/aa601.py diff --git a/maximum-depth-of-binary-tree/aa601.py b/maximum-depth-of-binary-tree/aa601.py new file mode 100644 index 000000000..c41bfb8a5 --- /dev/null +++ b/maximum-depth-of-binary-tree/aa601.py @@ -0,0 +1,12 @@ +''' +TC: O(n) +SC: O(n) +''' + +class Solution: + def maxDepth(self, root: Optional[TreeNode]) -> int: + # 재귀함수 호출 시 노드가 존재하지 않을 때 탈출한다 + if not root: + return 0 + # root를 기준으로 왼쪽 서브트리, 오른쪽 서브트리를 재귀호출로 쌓아놓고 리프노드부터 세면서 트리의 깊이를 구한다 + return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1 From ebf843aef96ab8b28b01ef07c8e6df519c99d1d3 Mon Sep 17 00:00:00 2001 From: vmop899 Date: Fri, 7 Mar 2025 23:10:08 +0900 Subject: [PATCH 2/6] FEAT: solve meeting-rooms --- meeting-rooms/aa601.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 meeting-rooms/aa601.py diff --git a/meeting-rooms/aa601.py b/meeting-rooms/aa601.py new file mode 100644 index 000000000..f9888a477 --- /dev/null +++ b/meeting-rooms/aa601.py @@ -0,0 +1,25 @@ +from typing import ( + List, +) +from lintcode import ( + Interval, +) +""" +Definition of Interval: +class Interval(object): + def __init__(self, start, end): + self.start = start + self.end = end +""" + +class Solution: + """ + @param intervals: an array of meeting time intervals + @return: if a person could attend all meetings + """ + def can_attend_meetings(self, intervals: List[Interval]) -> bool: + intervals.sort(key=lambda x: x.start) + for i in range(1, len(intervals)): + if intervals[i - 1].end > intervals[i].start: + return False + return True \ No newline at end of file From 5fb49da1d18c25ab1aa6410f4c4dd72241e33d2e Mon Sep 17 00:00:00 2001 From: vmop899 Date: Fri, 7 Mar 2025 23:12:22 +0900 Subject: [PATCH 3/6] FIX : lint add --- meeting-rooms/aa601.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meeting-rooms/aa601.py b/meeting-rooms/aa601.py index f9888a477..534dc41fb 100644 --- a/meeting-rooms/aa601.py +++ b/meeting-rooms/aa601.py @@ -22,4 +22,4 @@ def can_attend_meetings(self, intervals: List[Interval]) -> bool: for i in range(1, len(intervals)): if intervals[i - 1].end > intervals[i].start: return False - return True \ No newline at end of file + return True From d3dfa3ca12f278c885fef804beee6b2d147d65b7 Mon Sep 17 00:00:00 2001 From: vmop899 Date: Fri, 7 Mar 2025 23:19:09 +0900 Subject: [PATCH 4/6] =?UTF-8?q?CHORE=20:=20=EC=A3=BC=EC=84=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- meeting-rooms/aa601.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/meeting-rooms/aa601.py b/meeting-rooms/aa601.py index 534dc41fb..b78d663c0 100644 --- a/meeting-rooms/aa601.py +++ b/meeting-rooms/aa601.py @@ -1,3 +1,10 @@ +''' +TC: O(nlogn) +SC: O(1) +풀이 방법: 구간 중 첫번째 인자에 대해 정렬한 뒤, 이웃한 인자에 대해서만 겹치는지 확인한다 + 시간 복잡도는 정렬에 드는 nlogn만큼 필요하다 +''' + from typing import ( List, ) From 9faf96ba5d23b23af31a8a74a1cac90ce4c7a44d Mon Sep 17 00:00:00 2001 From: vmop899 Date: Sat, 8 Mar 2025 00:19:16 +0900 Subject: [PATCH 5/6] FEAT: solve lowest-common-ancestor-of-a-binary-search-tree --- .../aa601.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 lowest-common-ancestor-of-a-binary-search-tree/aa601.py diff --git a/lowest-common-ancestor-of-a-binary-search-tree/aa601.py b/lowest-common-ancestor-of-a-binary-search-tree/aa601.py new file mode 100644 index 000000000..8579ca684 --- /dev/null +++ b/lowest-common-ancestor-of-a-binary-search-tree/aa601.py @@ -0,0 +1,22 @@ +''' +TC: O(h) (h는 트리의 높이) +SC: O(1) +풀이 방법: 이진 탐색 트리의 성질을 이용해서 + p,q의 값이 현재 노드 사이에 있거나 p,q의 값 중 하나라도 현재 노드와 같을 때까지 탐색한다 +''' +# 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': + while root: + if p.val < root.val and q.val < root.val: + root = root.left + elif p.val > root.val and q.val > root.val: + root = root.right + else: + return root \ No newline at end of file From eb7d9aa692561311df8ef57cb252f0c42b0d4d67 Mon Sep 17 00:00:00 2001 From: aa601 <152935684+aa601@users.noreply.github.com> Date: Sat, 8 Mar 2025 00:21:06 +0900 Subject: [PATCH 6/6] CHORE: add newline --- lowest-common-ancestor-of-a-binary-search-tree/aa601.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lowest-common-ancestor-of-a-binary-search-tree/aa601.py b/lowest-common-ancestor-of-a-binary-search-tree/aa601.py index 8579ca684..bc5335384 100644 --- a/lowest-common-ancestor-of-a-binary-search-tree/aa601.py +++ b/lowest-common-ancestor-of-a-binary-search-tree/aa601.py @@ -19,4 +19,4 @@ def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') - elif p.val > root.val and q.val > root.val: root = root.right else: - return root \ No newline at end of file + return root