Skip to content

Commit f467d09

Browse files
committed
solve: Insert Interval
1 parent 000f4a6 commit f467d09

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

insert-interval/KwonNayeon.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
"""
2+
Constraints:
3+
- 0 <= intervals.length <= 10^4
4+
- intervals[i].length == 2
5+
- 0 <= starti <= endi <= 10^5
6+
- intervals is sorted by starti in ascending order.
7+
- newInterval.length == 2
8+
- 0 <= start <= end <= 10^5
9+
10+
Time Complexity: O(n)
11+
- 모든 interval을 한 번씩만 처리함
12+
13+
Space Complexity: O(n)
14+
- 최악의 경우 모든 interval을 결과 리스트에 저장
15+
16+
풀이방법:
17+
1. 세 단계로 구분하여 처리:
18+
- Step 1: newInterval보다 앞에 있는 intervals → 결과에 바로 추가
19+
- Step 2: newInterval과 겹치는 intervals → 병합하여 하나의 interval로 만듦
20+
- Step 3: newInterval보다 뒤에 있는 intervals → 결과에 바로 추가
21+
2. 병합 조건:
22+
- 두 interval이 겹치는 조건: intervals[i][0] <= mergedInterval[1]
23+
- 병합 시 시작점: min(mergedInterval[0], intervals[i][0])
24+
- 병합 시 끝점: max(mergedInterval[1], intervals[i][1])
25+
26+
노트:
27+
- 세 단계로 구분하여 처리하는 게 쉽지 않았다. 다음에 풀 땐 스스로 해결해볼 것
28+
"""
29+
class Solution:
30+
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
31+
result = []
32+
i = 0
33+
n = len(intervals)
34+
35+
while i < n and intervals[i][1] < newInterval[0]:
36+
result.append(intervals[i])
37+
i += 1
38+
39+
merged_interval = newInterval
40+
while i < n and intervals[i][0] <= merged_interval[1]:
41+
merged_interval[0] = min(merged_interval[0], intervals[i][0])
42+
merged_interval[1] = max(merged_interval[1], intervals[i][1])
43+
i += 1
44+
result.append(merged_interval)
45+
46+
while i < n:
47+
result.append(intervals[i])
48+
i += 1
49+
50+
return result

0 commit comments

Comments
 (0)