Algorithm/Problems

99클럽 코테 스터디 11일차 TIL + 이분탐색

공부좀하시졍 2025. 4. 14. 23:41

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

# 16401 과자 나눠주기

import sys
input = sys.stdin.readline

m, n = map(int, input().split())
snack = sorted(list(map(int, input().split())))

start = 1
end = snack[-1]

answer = 0
while start <= end:
    mid = (start + end) // 2

    cnt = 0 # 길이가 mid인 것을 만들 수 있는 개수
    for s in snack:
        cnt += s // mid
        
    if cnt >= m:
        answer = mid
        start = mid + 1
    else:
        end = mid - 1
print(answer)
  • 이분 탐색으로 조카에게 나눠줄 막대 과자의 최대 길이 (mid) 를 구해야 한다.
  • 이분 탐색은 오름차순 정렬을 해야 한다.
  • 최소 길이 1인 막대과자로 나눠야 하기 때문에 start = 1 , end = 입력 받은 막대과자의 최대길이 로 설정한다.
  • 길이가 mid 인 것을 만들 수 있는 개수를 cnt라 할 때 조카 수보다 많다면 막대과자의 길이(mid)를 늘려야 한다.