Skip to content

Commit 235c5f8

Browse files
authored
Merge pull request #2322 from Seoya0512/main
[Seoya0512] WEEK 13 solutions
2 parents fe565ac + 99f6168 commit 235c5f8

File tree

4 files changed

+86
-0
lines changed

4 files changed

+86
-0
lines changed

β€Žinsert-interval/Seoya0512.pyβ€Ž

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
'''
2+
Time Complexity : O(N)
3+
- newInterval을 μ‚½μž…ν•  μœ„μΉ˜ 탐색 O(N)
4+
- Intervals 병합을 μœ„ν•΄ for문으둜 λͺ¨λ“  ꡬ간을 순회 O(N)
5+
- O(N) + O(N) = O(N)
6+
7+
Space Complexity : O(N)
8+
- output λ¦¬μŠ€νŠΈμ— λͺ¨λ“  ꡬ간을 μ €μž₯ O(N)
9+
10+
'''
11+
class Solution:
12+
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
13+
idx = 0
14+
while idx < len(intervals) and intervals[idx][0] < newInterval[0]:
15+
idx +=1
16+
intervals.insert(idx, newInterval) # newInterval을 μ‚½μž…ν•  μœ„μΉ˜ 탐색 (O(N))
17+
18+
# Intervals 병합
19+
output = [intervals[0]]
20+
for interval in intervals[1:]:
21+
# 이전 ꡬ간과 κ²ΉμΉ˜λŠ” 경우
22+
if output[-1][1] >= interval[0]:
23+
output[-1][1] = max(output[-1][1], interval[1])
24+
else:
25+
output.append(interval)
26+
return output
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
'''
2+
Time Complexity: O(N)
3+
- dfs ν•¨μˆ˜κ°€ λͺ¨λ“  λ…Έλ“œλ₯Ό μ€‘μœ„μˆœνšŒ λ°©μ‹μœΌλ‘œ λ°©λ¬Έν•¨λ―€λ‘œ O(N) μ†Œμš”
4+
5+
Space Complexity: O(N)
6+
- aligned_arr λ¦¬μŠ€νŠΈμ— λͺ¨λ“  λ…Έλ“œμ˜ 값을 μ €μž₯ν•˜λ―€λ‘œ O(N) μ†Œμš”
7+
- μž¬κ·€ 호좜 μŠ€νƒμ΄ μ΅œλŒ€ 트리의 λ†’μ΄λ§ŒνΌ μŒ“μΌ 수 μžˆμœΌλ―€λ‘œ μ΅œμ•…μ˜ 경우 O(N) μ†Œμš”
8+
'''
9+
10+
# Definition for a binary tree node.
11+
# class TreeNode:
12+
# def __init__(self, val=0, left=None, right=None):
13+
# self.val = val
14+
# self.left = left
15+
# self.right = right
16+
class Solution:
17+
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
18+
aligned_arr = []
19+
20+
def dfs(node):
21+
if not node:
22+
return
23+
dfs(node.left)
24+
aligned_arr.append(node.val)
25+
dfs(node.right)
26+
27+
dfs(root)
28+
29+
return aligned_arr[k - 1]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'''
2+
Time Complexity: O(H)
3+
- HλŠ” 트리의 높이
4+
'''
5+
6+
class Solution:
7+
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
8+
if p.val < root.val and q.val < root.val:
9+
return self.lowestCommonAncestor(root.left, p, q)
10+
if p.val > root.val and q.val > root.val:
11+
return self.lowestCommonAncestor(root.right, p, q)
12+
return root

β€Žmeeting-rooms/Seoya0512.pyβ€Ž

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
'''
2+
Time Complexity: O(N log N)
3+
- intervals.sort() λŠ” O(N log N) μ†Œμš”
4+
- for loop λŠ” O(N) μ†Œμš”
5+
- μ „μ²΄μ μœΌλ‘œ O(N log N) + O(N) = O(N log N)
6+
7+
Space Complexity: O(1)
8+
- end_time, start_time μƒμˆ˜ λ³€μˆ˜ μΆ”κ°€λ‘œ μ‚¬μš©
9+
'''
10+
def can_attend_meetings(self, intervals: List[Interval]) -> bool:
11+
intervals.sort()
12+
end_time = intervals[0][1]
13+
14+
for i in range(1, len(intervals)):
15+
start_time = intervals[i][0]
16+
if end_time > start_time:
17+
return False
18+
end_time = intervals[i][1]
19+
return True

0 commit comments

Comments
Β (0)