[백준] 16401 (실버2)

zunzero·2022년 8월 21일
0

알고리즘(파이썬)

목록 보기
27/54

막대를 잘라서,,, 나눠주거나 합하고,,, 주어진 범위 내에서 특정값을 찾는,,,
어디선가 많이 본 패턴이다.
그렇다! 이분 탐색으로 쉽게 풀 수 있는 문제이다.

# binary search
n, m = map(int, input().split())
snacks = list(map(int, input().split()))

start = 0
end = max(snacks)

# 과자 길이
result = 0
while start <= end:
    # 나누어줄 수 있는 과자 개수
    count = 0

    mid = (start + end) // 2

    if mid == 0:
        count = 0
        break

    for snack in snacks:
        if snack - mid >= 0:
            count = count + (snack // mid)

    if count == n:
        result = mid
        break
    elif count > n:
        result = mid
        start = mid + 1
    else:
        end = mid - 1

print(result)
profile
나만 읽을 수 있는 블로그

0개의 댓글