시작 시점을 기준으로 오름차 순 정렬한 후 순회하며
현재 조회중인 지점의 종료 시간
과 다음 지점의 시작 시간
을 비교하여 병합 여부를 판단하면 된다.
function merge(intervals: number[][]): number[][] {
// 시작 시간 기준 오름차순 정렬
intervals.sort((a, b) => a[0] - b[0]);
const result = [];
// 현재 처리 중인 interval
let currentInterval = intervals[0];
// 모든 interval을 순회
for (let i = 1; i < intervals.length; i++) {
const nextInterval = intervals[i];
if (currentInterval[1] >= nextInterval[0]) {
// 끝점을 두 interval 중 더 큰 값으로 업데이트
currentInterval[1] = Math.max(currentInterval[1], nextInterval[1]);
} else {
// 병합할 수 없는 경우, 현재 interval을 결과에 추가하고 다음으로 이동
result.push(currentInterval);
currentInterval = nextInterval;
}
}
// 마지막으로 처리된 interval 추가
result.push(currentInterval);
return result;
}