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

거북이·2023년 8월 18일
0

백준[실버2]

목록 보기
75/81
post-thumbnail

💡문제접근

  • 이진 탐색을 이용하는 문제였다. ZeroDivisionError와 문제를 잘못 이해하여 예상보다 시간이 좀 더 걸렸다.
  • ZeroDivisionError 해결 : 과자의 길이는 (1 ≤ L1, L2, ..., LN ≤ 1,000,000,000)이다.

💡테스트케이스1

입력
3 10
1 2 3 4 5 6 7 8 9 10
출력
8

  • 길이가 8, 9, 10인 과자를 최소 길이인 8로 나누면 3명의 조카들에게 과자를 균등하게 나눠줄 수 있다.

💡테스트케이스2

입력
4 3
10 10 15
출력
7

  • 길이가 10, 10, 15인 과자를 최소 길이인 7로 나누면 4명의 조카들에게 과자를 균등하게 나눠줄 수 있다.

💡코드(메모리 : 146240KB, 시간 : 3320ms)

import sys
input = sys.stdin.readline

M, N = map(int, input().strip().split())
snack = list(map(int, input().strip().split()))

start = 1
end = max(snack)
while start <= end:
    result = 0
    mid = (start + end) // 2

    for i in snack:
        if i >= mid:
            result += i // mid

    if result >= M:
        start = mid + 1
    else:
        end = mid - 1
print(end)

💡소요시간 : 26m

0개의 댓글