본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬] 16401번 과자 나눠주기

by 현장 2022. 5. 19.

-Code

import sys
input = sys.stdin.readline

m, n = map(int, input().split())
cookies = list(map(int, input().split()))
left, right = 0, max(cookies)
max_l = 0
while left <= right:
    cnt = 0
    mid = (left + right) // 2
    if mid == 0:
        break
    for i in cookies:
        cnt += (i // mid)

    if cnt >= m:
        max_l = mid
        left = mid + 1
    else:
        right = mid - 1
print(max_l)

처음에는 리스트를 정렬하고 리스트 내의 최대값을 길이로 지정하고 이분탐색으로 길이보다 큰 리스트 범위만 검사하여 나눴을 때, 아이들 수와 같거나 크면 값을 출력하도록 했으나 코드가 꼬여서 다른 방법을 찾았습니다. 굳이 리스트의 범위를 검사할 필요 없이 길이만 조절하여 해당 리스트를 전부 돌아서 아이들 수만큼 분배가 가능하면 그 값을 저장하고 출력하면 해결이 되었습니다. 푸는 방식을 잘못 선택한 것이 조금 아쉬운 문제였습니다.