File tree Expand file tree Collapse file tree 1 file changed +32
-0
lines changed
Expand file tree Collapse file tree 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