Menu
CoddyTech

Insert Interval

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

시작점 기준으로 정렬된 구간 목록이 주어집니다. 목록은 길이가 같은 두 배열로 표현되며, 구간 i는 [starts[i], ends[i]]입니다. 서로 겹치거나 맞닿는 구간은 없습니다. 새 구간 하나 [newStart, newEnd]도 주어집니다. 이 구간을 삽입하고, 겹치거나 맞닿는 모든 구간과 병합한 다음, 모든 구간을 시작점 기준으로 정렬된 [start, end] 쌍의 2차원 배열로 반환하세요.

한 구간의 끝점이 다른 구간의 시작점과 같으면 두 구간은 맞닿습니다. 예를 들어 [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 이후에 시작하므로 둘 다 그대로 유지됩니다.

lock icon제출 시 숨은 테스트 +20개

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]]