Skip to content

Commit ec2ec3c

Browse files
committed
57 / Insert Interval / Medium / 32m
1 parent 3b9ae7d commit ec2ec3c

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

wjsdncl/57_Insert_Interval.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* 32m31s 소요
3+
*
4+
* 시간복잡도 : O(n) (n: intervals의 길이)
5+
*
6+
* 구간들의 배열과 새로운 구간이 주어질 때, 구간들을 병합한 결과를 반환하는 문제입니다.
7+
*
8+
* 구간들을 순회하면서 새로운 구간과 겹치는 구간을 병합합니다.
9+
* 새로운 구간이 구간들보다 클 때까지 구간들을 병합합니다.
10+
* 새로운 구간이 구간들보다 작을 때까지 구간들을 병합합니다.
11+
* 나머지 구간들을 결과에 추가합니다.
12+
* 결과를 반환합니다.
13+
*/
14+
var insert = function (intervals, newInterval) {
15+
const result = [];
16+
let i = 0;
17+
18+
// newInterval 이전의 겹치지 않는 구간 추가
19+
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
20+
result.push(intervals[i]);
21+
i++;
22+
}
23+
24+
// newInterval과 겹치는 구간 병합
25+
while (i < intervals.length && intervals[i][0] <= newInterval[1]) {
26+
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
27+
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
28+
i++;
29+
}
30+
result.push(newInterval); // 병합된 구간 추가
31+
32+
// newInterval 이후의 겹치지 않는 구간 추가
33+
while (i < intervals.length) {
34+
result.push(intervals[i]);
35+
i++;
36+
}
37+
38+
return result;
39+
};

0 commit comments

Comments
 (0)