Skip to content

Commit e4555f4

Browse files
committed
meeting-rooms-ii solution (py)
1 parent 762b9cc commit e4555f4

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
"""
2+
https://neetcode.io/problems/meeting-schedule-ii
3+
4+
μ£Όμ–΄μ§€λŠ” 회의 μ‹œκ°„ 리슀트 intervals = [[s₁, e₁], [sβ‚‚, eβ‚‚], ...] (각 si < ei)에 λŒ€ν•΄,
5+
λ™μ‹œμ— μ§„ν–‰λ˜λŠ” 회의의 μ΅œλŒ€ 개수, 즉 ν•„μš”ν•œ μ΅œμ†Œ νšŒμ˜μ‹€ 개수λ₯Ό κ³„μ‚°ν•˜λŠ” 문제
6+
7+
TC: O(N log N), 회의 μ‹œκ°„ μ •λ ¬ O(N log N)
8+
SC: O(N), λ°°μ—΄ μ‚¬μš©
9+
"""
10+
11+
#Definition of Interval:
12+
class Interval(object):
13+
def __init__(self, start, end):
14+
self.start = start
15+
self.end = end
16+
17+
from typing import List
18+
19+
class Solution:
20+
def minMeetingRooms(self, intervals: List[List[int]]) -> int:
21+
if not intervals:
22+
return 0
23+
24+
# 회의 μ‹œμž‘ μ‹œκ°„κ³Ό μ’…λ£Œ μ‹œκ°„μ„ μ €μž₯ν•˜λŠ” λ°°μ—΄
25+
start_times = [interval.start for interval in intervals]
26+
end_times = [interval.end for interval in intervals]
27+
28+
# μ‹œμž‘ μ‹œκ°„κ³Ό μ’…λ£Œ μ‹œκ°„μ„ μ •λ ¬
29+
start_times.sort()
30+
end_times.sort()
31+
32+
# νšŒμ˜μ‹€ 개수 μ΄ˆκΈ°ν™”
33+
rooms = 0
34+
end_index = 0
35+
36+
# 각 회의 μ‹œμž‘ μ‹œκ°„μ„ μˆœνšŒν•˜λ©° νšŒμ˜μ‹€ 개수 계산
37+
for start in start_times:
38+
# ν˜„μž¬ 회의 μ‹œμž‘ μ‹œκ°„μ΄ 이전 회의 μ’…λ£Œ μ‹œκ°„λ³΄λ‹€ ν¬κ±°λ‚˜ κ°™μœΌλ©΄ νšŒμ˜μ‹€ 개수 쀄이기
39+
if start >= end_times[end_index]:
40+
rooms -= 1
41+
end_index += 1
42+
rooms += 1
43+
44+
return rooms
45+
46+
47+
48+
"""
49+
νž™ 풀이
50+
51+
TC: O(N log N), 회의 μ‹œκ°„ μ •λ ¬ O(N log N)
52+
SC: O(N), μ΅œμ•…μ˜ 경우 λͺ¨λ“  νšŒμ˜κ°€ κ²ΉμΉ¨
53+
"""
54+
55+
import heapq
56+
57+
class Solution:
58+
def minMeetingRooms(self, intervals: List[Interval]) -> int:
59+
if not intervals:
60+
return 0
61+
62+
intervals.sort(key=lambda x: x.start)
63+
64+
heap = []
65+
66+
for interval in intervals:
67+
start = interval.start
68+
end = interval.end
69+
70+
# ν˜„μž¬ 회의의 μ‹œμž‘ μ‹œκ°„ >= κ°€μž₯ 빨리 λλ‚˜λŠ” 회의의 μ’…λ£Œ μ‹œκ°„μ΄λΌλ©΄
71+
# κ·Έ νšŒμ˜μ‹€μ€ λ‹€μ‹œ μ‚¬μš©ν•  수 μžˆμœΌλ―€λ‘œ heapμ—μ„œ 제거 (pop)
72+
if heap and heap[0] <= start:
73+
heapq.heappop(heap)
74+
75+
# μƒˆ 회의의 μ’…λ£Œ μ‹œκ°„μ„ νž™μ— μΆ”κ°€
76+
heapq.heappush(heap, end)
77+
78+
# νž™μ— 남아 μžˆλŠ” μ’…λ£Œ μ‹œκ°„ 수 = λ™μ‹œμ— μ§„ν–‰ 쀑인 회의 수 = ν•„μš”ν•œ μ΅œμ†Œ νšŒμ˜μ‹€ 수
79+
return len(heap)

0 commit comments

Comments
Β (0)