Menu
CoddyTech

Book Allocation Problem

선반에는 책들이 정해진 순서로 놓여 있고, pages[i]는 i번째 책의 페이지 수입니다. 책을 students명의 학생에게 나누어 주세요. 각 학생은 이웃한 책을 끊김 없이 이어지는 한 구간으로 받으며, 각 학생은 최소 한 권씩 받고, 모든 책은 정확히 한 명의 학생에게 배정됩니다. 학생의 할당량은 그 학생이 받은 책의 총 페이지 수입니다.

가장 무거운 할당량의 가능한 최솟값을 반환하세요. 학생 수가 책 수보다 많으면 -1을 반환하세요.

함수

allocateBooks(pages: integer-array, students: integer) → integer
pagesinteger-array
책장에 놓인 순서대로 각 책의 페이지 수
studentsinteger
책을 함께 나누는 학생 수
반환값integer
가능한 가장 작은 최대 적재량, 또는 학생 수가 책 수보다 많으면 -1

제약 조건

  • 1 ≤ pages.length ≤ 5000
  • 1 ≤ pages[i] ≤ 105
  • 1 ≤ students ≤ 104
  • students > pages.length일 때 -1을 반환합니다.

예제

입력
pages = [25, 40, 15, 30, 50]students = 3
출력
65
설명
[25, 40], [15, 30], [50]을 나눠 주면 각 묶음의 합은 65, 45, 50입니다. 한도가 64이면 실패합니다. 나눠 주면 [25], [40, 15], [30], [50]이 되어 학생이 네 명이 됩니다.
challenge icon

후속 질문

평균 몫을 올림한 값에 가장 두꺼운 책의 두께를 더하면 항상 유효한 상한이 됨을 증명하세요. 얇은 책들로 이루어진 선반에서는 이 상한으로 검사 횟수를 얼마나 줄일 수 있나요?

코드 초기화
def allocateBooks(pages, students):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

테스트 #3

인자들

pages = [25, 40, 15, 30, 50]
students = 3

예상 출력

65