Skip to content

Commit 707b50c

Browse files
committed
add solution: meeting-rooms-ii
1 parent 3d97426 commit 707b50c

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

β€Žmeeting-rooms-ii/dusunax.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
'''
2+
# 253. Meeting Rooms II
3+
4+
μ΅œμ†Œ νž™ Min Heap을 μ‚¬μš©ν•˜μ—¬ 회의 μ’…λ£Œ μ‹œκ°„μ„ μ €μž₯ν•©λ‹ˆλ‹€. μ΅œμ†Œ νž™μ˜ κΈΈμ΄λŠ” ν•„μš”ν•œ νšŒμ˜μ‹€ κ°œμˆ˜μž…λ‹ˆλ‹€.
5+
6+
## κ°œλ…
7+
```
8+
πŸ’‘ μ΅œμ†Œ νž™ Min Heap
9+
- νž™μ€ μ™„μ „ 이진 νŠΈλ¦¬μ΄λ‹€.
10+
- λΆ€λͺ¨ λ…Έλ“œμ˜ 값이 μžμ‹ λ…Έλ“œμ˜ 값보닀 μž‘λ‹€.
11+
- μ΅œμ†Œκ°’μ„ λ£¨νŠΈμ— 두기 λ•Œλ¬Έμ— μ΅œμ†Œκ°’μ„ μ°ΎλŠ” μ‹œκ°„λ³΅μž‘λ„κ°€ O(1)이닀.
12+
```
13+
```
14+
πŸ’‘ μ™„μ „ 이진 트리
15+
- 트리의 λͺ¨λ“  레벨이 μ™„μ „νžˆ μ±„μ›Œμ Έ 있고, λ§ˆμ§€λ§‰ λ ˆλ²¨μ€ μ™Όμͺ½λΆ€ν„° μ±„μš΄λ‹€.
16+
- μ‚½μž…κ³Ό μ‚­μ œλŠ” O(log n)의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°€μ§„λ‹€.
17+
- μ‚½μž…μ€ 트리의 λ§ˆμ§€λ§‰ λ…Έλ“œμ— μ‚½μž…ν•˜κ³  버블업을 μ§„ν–‰ν•œλ‹€.
18+
- μ‚­μ œλŠ” 트리의 루트 λ…Έλ“œλ₯Ό μ‚­μ œν•˜κ³ , λ²„λΈ”λ‹€μš΄μ„ μ§„ν–‰ν•œλ‹€.
19+
```
20+
21+
## νšŒμ˜μ‹€ μž¬μ‚¬μš© 쑰건
22+
κ°€μž₯ λ¨Όμ € λλ‚˜λŠ” νšŒμ˜μ™€ λ‹€μŒ 회의 μ‹œμž‘μ„ λΉ„κ΅ν•˜μ—¬, λ‹€μŒ 회의 μ‹œμž‘μ΄ κ°€μž₯ λ¨Όμ € λλ‚˜λŠ” νšŒμ˜λ³΄λ‹€ ν¬κ±°λ‚˜ κ°™λ‹€λ©΄, 같은 νšŒμ˜μ‹€μ„ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.
23+
24+
## 풀이
25+
```
26+
μ΅œμ†Œ νž™μ˜ 길이 = μ‚¬μš© 쀑인 νšŒμ˜μ‹€ 개수 = ν•„μš”ν•œ νšŒμ˜μ‹€ 개수
27+
```
28+
1. 회의 μ‹œμž‘ μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ μ •λ ¬
29+
2. 회의 배열을 μˆœνšŒν•˜λ©° 회의 μ’…λ£Œ μ‹œκ°„μ„ μ΅œμ†Œ νž™μ— μ €μž₯
30+
3. νšŒμ˜μ‹€μ„ μž¬μ‚¬μš©ν•  수 μžˆλŠ” 경우, κ°€μž₯ λ¨Όμ € λλ‚˜λŠ” 회의 μ‚­μ œ ν›„ μƒˆ 회의 μ’…λ£Œ μ‹œκ°„ μΆ”κ°€(ν•΄λ‹Ή νšŒμ˜μ‹€μ˜ μ’…λ£Œ μ‹œκ°„ μ—…λ°μ΄νŠΈ)
31+
4. μ΅œμ’… μ‚¬μš© 쀑인 νšŒμ˜μ‹€ 개수λ₯Ό λ°˜ν™˜
32+
33+
34+
## μ‹œκ°„ & 곡간 λ³΅μž‘λ„
35+
- μ‹œκ°„ λ³΅μž‘λ„: O(n log n)
36+
- 회의 λ°°μ—΄ μ •λ ¬: O(n log n)
37+
- 회의 λ°°μ—΄ 순회: O(n)
38+
- μ΅œμ†Œ νž™ μ‚½μž… & μ‚­μ œ: O(log n)
39+
- 곡간 λ³΅μž‘λ„: O(n)
40+
- μ΅œμ†Œ νž™ μ‚¬μš©: O(n), μ΅œμ•…μ˜ 경우
41+
'''
42+
from heapq import heappush, heappop
43+
44+
class Solution:
45+
def minMeetingRooms(self, intervals: List[Interval]) -> int:
46+
if not intervals:
47+
return 0
48+
49+
intervals.sort(key=lambda x: x.start)
50+
51+
min_heap = []
52+
for interval in intervals:
53+
if min_heap and min_heap[0] <= interval.start:
54+
heappop(min_heap)
55+
56+
heappush(min_heap, interval.end)
57+
58+
return len(min_heap)

0 commit comments

Comments
Β (0)