forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathliza0525.py
More file actions
31 lines (27 loc) ยท 1.6 KB
/
Copy pathliza0525.py
File metadata and controls
31 lines (27 loc) ยท 1.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 7๊ธฐ ํ์ด
# ์๊ฐ ๋ณต์ก๋: O(n log n)
# - mergeํ๋ ๋ก์ง์ intervals์ ๊ธธ์ด(n)๋งํผ์ ์๊ฐ ์์
# - intervals๋ฅผ sortingํ๋ ๋ก์ง์ n log n ๋งํผ์ ์๊ฐ ์์
# ๊ณต๊ฐ ๋ณต์ก๋: O(1)
# - ๊ฒฐ๊ณผ ๋ฆฌ์คํธ(res) ์ ์ธ, ๋ช ๊ฐ์ ๋ณ์๋ง ์ฌ์ฉ
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
# ๋จผ์ intervals๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก sortingํ๋ค.
# ๊ฐ ์์์ ์ฒซ๋ฒ์งธ ๊ฐ์ ๊ธฐ์ค์ผ๋ก
intervals.sort()
i, j = 0, 1
res = []
# intervals๋ฅผ ํ์ํ๋ i๊ฐ ๊ทธ ๊ธธ์ด๋ณด๋ค ์์ ๋ loop๋ฅผ ๋๋ค
while i < len(intervals):
curr_start, curr_end = intervals[i] # ์ฒซ๋ฒ์งธ ๋จธ์ง ๋์์ ๊ธฐ์ค์ผ๋ก
while j < len(intervals): # j๋ฒ์งธ ์์๋ค์ ๊ณ์ ๋จธ์งํจ(๋ฒ์ ๋จธ์ง๊ฐ ๊ฐ๋ฅํ ํ)
next_start, next_end = intervals[j]
if curr_start <= next_start <= curr_end: # ๋ค์ ์์์ ์ฒซ๋ฒ์งธ ๊ฐ์ด ํ์ฌ ์์ ๋ฒ์ ๋ด์ ์์ ๋
curr_end = max(curr_end, next_end) # ๋ ํฐ ๋ฒ์๋ก ๋จธ์ง
else: # ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด๋ฒ ํ
์์์ ๋จธ์ง๊ฐ ์๋ฃ๋ ๊ฒ์ด๋ฏ๋ก loop ํ์ถ
break
j += 1 # ๋จธ์ง๊ฐ ๊ฐ๋ฅํ ํ j๋ฅผ ๊ณ์ ์ฌ๋ ค์ค๋ค.
res.append([curr_start, curr_end]) # ๋จธ์ง ์๋ฃ๋ ๊ตฌ๊ฐ์ res์ ๋ด๊ณ
i = j # ์ด๋ฒ loop์์ ์ฌ์ฉํ๋ j๊ฐ ๋ค์ ๋ฃจํ์ i๊ฐ ๋๊ณ
j = i + 1 # j๋ i์ ๋ค์ ์ธ๋ฑ์ค๋ถํฐ ๋ค์ ๋จธ์ง๋ฅผ ํ ์ ์๋๋ก ๋ณ๊ฒฝ
return res