이전 풀이와 동일한 개념으로 접근하되, 주요 포인트는 겹치지 않는 구간에 대해 추가하고 구간이 겹치는 부분에 대한 병합 구간을 추가할 수 있느냐 이다.
function insert(intervals: number[][], newInterval: number[]): number[][] {
const result = [];
let i = 0;
const n = intervals.length;
// 목표 구간과 겹치지 못하고 먼저 실행되는 구간 추가
while (i < n && intervals[i][1] < newInterval[0]) {
result.push(intervals[i]);
i++;
}
// 새 구간과 겹치는 구간들을 병합
while (i < n && intervals[i][0] <= newInterval[1]) {
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
i++;
}
// 병합된 새 구간을 결과에 추가
result.push(newInterval);
// 목표 구간과 겹치지 못하고 이후에 실행되는 구간 추가
while (i < n) {
result.push(intervals[i]);
i++;
}
return result;
}