[백준/BOJ][Python] 16401번 과자 나눠주기

Eunding·2024년 12월 2일
0

algorithm

목록 보기
60/107

16401번 과자 나눠주기

https://www.acmicpc.net/problem/16401


아이디어

막대 과자 길이를 이분탐색으로 찾으면 된다.
그리고 막대 과자를 나눴을 때 조카 수보다 많이 나오거나 같을 때는 low = mid + 1(더 긴 막대과자를 찾도록), 적게 나오면 high = mid - 1(막대 과자를 줄여야하므로)


코드

import sys
input = sys.stdin.readline

m, n = map(int, input().split()) # M명 조카, N개 과자
snack = list(map(int, input().split()))

low = 1
high = max(snack)
answer = 0

while low <= high:
    mid = (low+high) // 2 # 막대 과자 최대 길이라고 생각
    cnt = 0 # 막대과자 몇 개 나오는지
    for num in snack:
        cnt += num // mid
        
    if cnt >= m: # 막대과자가 조카 수보다 많이 나오면
        answer = mid
        low = mid + 1
    else:
        high = mid - 1

0개의 댓글