Menu
CoddyTech

Non-overlapping Intervals

구간 목록은 두 개의 배열로 주어집니다. 구간 i는 starts[i]부터 ends[i]까지입니다. 남은 구간 중 어떤 두 구간도 겹치지 않도록 가능한 한 적은 수의 구간을 제거하세요. 한 구간이 끝나는 지점에서 다른 구간이 시작되어 서로 맞닿기만 하는 경우에는 겹치는 것으로 보지 않습니다.

제거해야 하는 구간의 최소 개수를 반환하는 eraseOverlapIntervals라는 함수를 작성하세요.

함수

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
각 구간의 시작
endsinteger-array
각 구간의 끝, 시작과 같은 인덱스
반환값integer
나머지 구간이 겹치지 않도록 제거해야 하는 구간의 최소 개수

제약 조건

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • 구간은 정렬되어 있지 않습니다. 두 구간은 동일할 수 있습니다.

예제

입력
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
출력
2
설명
시작 순서대로 구간은 [1,4], [2,3], [3,6], [5,7]입니다. 서로 맞닿기만 하는 [2,3]과 [3,6]은 남기고 나머지 2개는 제거합니다. 세 개를 남길 수는 없습니다. [1,4]는 [2,3]과 겹치고 [3,6]은 [5,7]과 겹치며, 네 구간 중 어떤 세 구간을 골라도 이 쌍 중 하나가 포함되기 때문입니다.

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

challenge icon

후속 질문

각 구간에 값도 있고, 서로 겹치지 않는 구간들의 값의 합을 최대로 만들고 싶다고 가정해 봅시다. 가장 먼저 끝나는 구간을 계속 선택하는 방법이 여전히 통할까요? 대신 어떤 방법을 사용하시겠어요?

코드 초기화
def eraseOverlapIntervals(starts, ends):
    # 여기에 코드를 작성하세요
테스트 케이스

케이스 1

케이스 2

케이스 3

입력

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

기대값

2