이진 탐색 예제 - 2
문제 분석
손으로 풀어보기
슈도코드
n(강의 수) m(블루레이 개수)
A(기타 레슨 데이터 저장 리스트)
start(시작 인덱스)
end(종료 인덱스)
for A 탐색:
시작 인덱스 저장(A 리스트 중 최댓값)
종료 인덱스 저장(A 리스트의 총합)
while 시작 인덱스 <= 종료 인덱스:
mid(중간 인덱스)
sum(레슨 합)
count(현재 사용한 블루레이 개수)
for n 반복:
if sum + 현재 레슨 시간 > 중간 인덱스:
count 값을 올리고 sum 0으로 리셋 # 현재 블루레이에 저장할 수 없어 새로운 블루레이로 교체한다는 의미
sum에 현재 레슨 시간값 더하기
sum이 0이 아니면 마지막 블루레이가 필요하므로 count 증가
if count > m: # 중간 인덱스 값으로 모든 레슨 저장 불가능
시작 인덱스 = 중간 인덱스 + 1
else: # 중간 인덱스 값으로 모든 레슨 저장 가능
종료 인덱스 = 중간 인덱스 - 1
시작 인덱스 출력코드 구현 - 파이썬
코드 구현 - 자바
Last updated