File tree 1 file changed +32
-0
lines changed
1 file changed +32
-0
lines changed Original file line number Diff line number Diff line change
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
+
You can’t perform that action at this time.
0 commit comments