Menu
CoddyTech

Merge Intervals

보통구간정렬python iconjava iconcpp iconc iconjs icon+10

시작부터 끝까지의 정수 범위인 구간들이 주어집니다. 겹치는 모든 구간을 전체 범위를 포함하는 하나의 구간으로 병합하고, 병합된 구간을 시작점 기준으로 정렬하여 반환하세요. [1, 4]와 [4, 5]처럼 서로 맞닿기만 하는 구간도 겹치는 것으로 간주합니다.

구간은 길이가 같은 두 배열로 주어집니다. 구간 i는 [starts[i], ends[i]]입니다. [start, end] 쌍의 목록인 2차원 배열을 반환하세요.

함수

mergeIntervals(starts: integer-array, ends: integer-array) → integer-2d-array
startsinteger-array
각 구간의 시작
endsinteger-array
각 구간의 끝, 시작과 같은 인덱스에
반환값integer-2d-array
시작을 기준으로 정렬된 [start, end] 쌍 형태의 병합된 구간

제약 조건

  • 1 ≤ starts.length == ends.length ≤ 104
  • 0 ≤ starts[i] ≤ ends[i] ≤ 104
  • 구간은 순서에 관계없이 주어집니다.
  • 끝점에서만 맞닿는 구간도 겹치는 것으로 간주합니다.

예제

입력
starts = [5, 1, 12, 3]ends = [7, 4, 14, 6]
출력
[[1, 7], [12, 14]]
설명
시작 순서대로 보면 [1, 4]는 [3, 6]과 겹치고, [3, 6]은 [5, 7]과 겹치므로 세 구간은 [1, 7]이 됩니다. [12, 14]는 7 이후에 시작하므로 따로 유지됩니다.
challenge icon

후속 질문

구간은 이미 병합되어 시작점 기준으로 정렬된 상태로 주어지며, 새로운 구간 하나를 추가해야 합니다. 다시 정렬하지 않고 O(n) 시간에 병합된 목록을 반환할 수 있나요?

코드 초기화
def mergeIntervals(starts, ends):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

인자들

starts = [5, 1, 12, 3]
ends = [7, 4, 14, 6]

예상 출력

[[1, 7], [12, 14]]