Menu
CoddyTech

Split Array Largest Sum

음수가 아닌 정수로 이루어진 배열 nums와 정수 k가 주어집니다. nums를 정확히 k개의 부분으로 나누세요. 각 부분은 서로 이웃한 값들로 이루어진 비어 있지 않은 연속 구간이어야 하며, 부분들의 순서는 유지해야 합니다. 각 부분에는 합이 있으며, 분할의 비용은 그 합들 중 가장 큰 값입니다.

k개의 부분으로 나누었을 때 도달할 수 있는 가장 작은 비용을 반환하세요.

함수

splitArray(nums: integer-array, k: integer) → integer
numsinteger-array
음이 아닌 값들을 순서대로
kinteger
이들을 잘라 나눌 연속된 부분의 수
반환값integer
가장 큰 부분 합의 가능한 최솟값

제약 조건

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 105
  • 1 ≤ k ≤ nums.length
  • 각 부분은 최소 하나의 값을 포함합니다. 모든 값이 0인 부분의 합은 0이며, 이는 허용됩니다.

예제

입력
nums = [6, 2, 9, 4, 7, 3]k = 3
출력
13
설명
분할 [6, 2], [9, 4], [7, 3]의 합은 8, 13, 10이므로 비용은 13입니다. 비용이 12인 분할은 없습니다. 각 합이 12 이하가 되도록 왼쪽에서 오른쪽으로 묶으면 [6, 2], [9], [4, 7], [3]이 되어, 허용된 부분은 3개뿐인데 4개가 됩니다.

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

challenge icon

후속 질문

각 탐욕적 검사는 모든 n 값을 읽습니다. 누적 합을 사용하면 검사에서 이진 탐색으로 각 부분이 끝나는 위치를 찾을 수 있습니다. k가 작고 nums가 길 때 전체 방법의 속도는 얼마나 빨라질까요?

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

케이스 1

케이스 2

케이스 3

입력

nums = [6, 2, 9, 4, 7, 3]
k = 3

기대값

13