Skip to content

Commit 35141d7

Browse files
committed
add: solve #278 Merge Intervals with ts
1 parent 8d4834c commit 35141d7

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

merge-intervals/Yjason-K.ts

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* 겹치는 구간(interval)을 병합하는 함수
3+
* @param {number[][]} intervals - 각 구간을 나타내는 2차원 배열 [[start, end], ...]
4+
* @returns {number[][]} - 겹치는 구간을 병합한 결과 배열
5+
*
6+
* 시간 복잡도: O(n log n)
7+
* - 정렬 과정에서 O(n log n), 병합 과정에서 O(n)으로 최종 O(n log n)
8+
*
9+
* 공간 복잡도: O(n)
10+
* - 정렬된 배열을 저장하는 데 O(n), 결과 배열도 O(n)을 차지
11+
*/
12+
function merge(intervals: number[][]): number[][] {
13+
let result: number[][] = [];
14+
15+
// 시작 시간을 기준으로 정렬 (오름차순)
16+
intervals.sort((a, b) => a[0] - b[0]);
17+
18+
for (let interval of intervals) {
19+
// 결과 리스트가 비어있거나
20+
// 현재 구간이 이전 구간과 겹치지 않는 경우
21+
if (result.length === 0 || result[result.length - 1][1] < interval[0]) {
22+
result.push(interval); // 새로운 구간 추가
23+
} else {
24+
// 결과 값의 마지막 interval을 기준으로
25+
// 현재 구간이 이전 구간과 겹치는 경우, 두 구간을 병합
26+
result[result.length - 1][1] = Math.max(result[result.length - 1][1], interval[1]);
27+
}
28+
}
29+
30+
return result;
31+
}
32+

0 commit comments

Comments
 (0)