• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

섹션 4 뮤직비디오 문제에 대해서 질문드립니다.

21.08.26 16:04 작성 조회수 133

1

안녕하세요 선생님, 복습 중에 이해 되질 않는 점이 있어 문의드립니다. 반례 수정 영상 까지 전부 보았습니다.

말씀 해주신대로 dvd 한 장의 길이가 최소한  노래들 중에서 가장 긴 곡보다는 길어야 하므로 저는 아예 처음부터 lt를 노래들 중 가장 긴 곡으로 설정하였고, 이를 적용한 풀이는 아래와 같습니다. 

n, m = map(int, input().split())
song = list(map(int, input().split()))
song.sort()


def count(length):
    cnt = 1 # 최소 1장
    size = 0
    for i in range(n):
        if size + song[i] > length:
            cnt += 1
            size = song[i]
        else:
            size += song[i]
    return cnt

lt = max(song) # 최소한 가장 긴곡의 길이보다는 길어야 하니까(노래 쪼개지면 안됨)
rt = sum(song)
res = 0
while lt <= rt:
    mid = (lt + rt) // 2
    if count(mid) <=m:
        res = mid
        rt = mid - 1
    else:
        lt = mid + 1

print(res)

여기서 두 번째 테스트 케이스를 실행하였을 때 원래 답인 24가 아니고 23의 결과를 도출하는데요, 실제로도 23으로도 3장에 담는 것이 가능한 것을 확인하였습니다. 테스트 케이스 답안에 문제가 있는 걸까요? 확인해주시면 감사하겠습니다. 

(수정) 죄송합니다 선생님, 이진검색은 정렬된 자료에서 써야하는 것을 엉뚱하게 주어진 자료에다가 정렬을 해버렸네요. 다른 사람들도 도움이 될 수있도록 질문글은 남겨두겠습니다. 좋은 강의 감사합니다!!!

답변 1

답변을 작성해보세요.

0

안녕하세요^^

네. 이분검색은 기본적으로 정렬된 자료에 적용됩니다.