Skip to content

Commit 73e01ba

Browse files
committed
non-overlapping-intervals (py)
1 parent 9781dcf commit 73e01ba

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
"""
2+
๊ตฌ๊ฐ„์ด ๊ฒน์ณ ์‚ญ์ œํ•ด์•ผ ๋˜๋Š” ์ตœ์†Œ ๊ตฌ๊ฐ„์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด๋ผ
3+
-> Greedy
4+
-> '๊ฒน์น˜์ง€ ์•Š๊ฒŒ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๊ตฌ๊ฐ„์„ ๋‚จ๊ธฐ๊ณ , ๋‚˜๋จธ์ง€๋ฅผ ์ œ๊ฑฐ'
5+
6+
๋ฌธ์ œ ํ’€์ด
7+
1. ๋๋‚˜๋Š” ์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
8+
2. ์ด์ „ ๊ตฌ๊ฐ„์˜ ๋๊ณผ ํ˜„์žฌ ๊ตฌ๊ฐ„์˜ ์‹œ์ž‘์„ ๋น„๊ต
9+
3. ๊ฒน์น˜๋ฉด ํ˜„์žฌ ๊ตฌ๊ฐ„์„ ์ œ๊ฑฐ
10+
11+
TC: O(n log n), ์ •๋ ฌ O(n log n) + ๋ชจ๋“  interval ํ•œ ๋ฒˆ์”ฉ ์ˆœํšŒ O(n)
12+
SC: O(1)
13+
"""
14+
15+
from typing import List
16+
17+
class Solution:
18+
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
19+
# ๋๋‚˜๋Š” ์‹œ๊ฐ„์ด ๋น ๋ฅธ ์ˆœ์œผ๋กœ ์ •๋ ฌ
20+
# -> ์ผ์ฐ ๋๋‚˜๋Š” ๊ตฌ๊ฐ„์„ ์„ ํƒํ•˜๋ฉด, ์ดํ›„์— ๋” ๋งŽ์€ ๊ตฌ๊ฐ„์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์—ฌ์ง€๊ฐ€ ์ปค์ง!
21+
intervals.sort(key=lambda x: x[1])
22+
23+
# ์ฒซ ๊ตฌ๊ฐ„ ์„ ํƒ
24+
prev_end = float('-inf') # ์Œ์˜ ๋ฌดํ•œ๋Œ€๋กœ ๋น„๊ต์˜ ๊ธฐ์ค€๊ฐ’ ๊ฐ€์žฅ ์ž‘๊ฒŒ ์„ค์ • -> ์ฒซ ๋ฒˆ์งธ ๊ตฌ๊ฐ„ ๋ฌด์กฐ๊ฑด ์„ ํƒ๋จ
25+
count = 0
26+
27+
# ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌ
28+
for start, end in intervals:
29+
if start >= prev_end:
30+
# ๊ฒน์น˜์ง€ ์•Š์Œ -> ๊ทธ๋Œ€๋กœ ์œ ์ง€
31+
prev_end = end
32+
else:
33+
# ๊ฒน์นจ -> ํ•˜๋‚˜ ์ œ๊ฑฐ
34+
count += 1
35+
36+
return count

0 commit comments

Comments
ย (0)