Menu
CoddyTech

Insert Interval

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

시작값 기준으로 정렬된 구간을 두 배열로 받습니다. 구간 i는 [starts[i], ends[i]]이며, 서로 겹치거나 맞닿는 구간은 없습니다. 새 구간 [newStart, newEnd]를 삽입하고, 겹치거나 맞닿는 모든 구간과 병합한 뒤, 시작값 기준으로 정렬된 모든 구간을 [start, end] 쌍으로 반환하세요.

한 구간의 끝점이 다른 구간의 시작점과 같으면 구간이 맞닿습니다. 예를 들어 [2, 4]와 [4, 8]이 그렇고, 맞닿는 구간은 병합됩니다. [1, 2]와 [3, 4]는 공통점이 없으므로 서로 분리된 상태로 유지됩니다.

함수

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
각 구간의 시작점, 오름차순으로
endsinteger-array
각 구간의 끝, 이에 대응하는 시작점
newStartinteger
삽입할 구간의 시작
newEndinteger
삽입할 구간의 끝
반환값integer-2d-array
삽입 후의 구간들을 [start, end] 쌍으로 나타내고, start를 기준으로 정렬합니다

제약 조건

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: 구간은 시작 시점을 기준으로 정렬되어 있으며, 어떤 두 구간도 겹치거나 맞닿지 않습니다.
  • 0 ≤ newStart ≤ newEnd ≤ 105

예제

입력
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
출력
[[1, 3], [5, 12], [15, 18]]
설명
[6, 11]은 [5, 7] 및 [10, 12]와 겹치므로 세 구간은 [5, 12]가 됩니다. [1, 3]은 6 전에 끝나고 [15, 18]은 12 뒤에 시작하므로 둘 다 그대로 유지됩니다.
challenge icon

후속 질문

많은 구간을 연이어 삽입한다면, 각 삽입에 O(log n)에 삼켜지는 기존 구간마다 한 단계씩 더한 비용이 들도록 구간을 어떻게 저장하겠습니까?

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

테스트 #1

테스트 #2

테스트 #3

인자들

starts = [1, 5, 10, 15]
ends = [3, 7, 12, 18]
newStart = 6
newEnd = 11

예상 출력

[[1, 3], [5, 12], [15, 18]]