풀이 및 해설(주석)

import sys

def solve(start, end):
    # 탈출 조건
    if end - start <= 1:
        # start를 포함한 숫자 부터 end미만의 숫자이므로 start를 return하며 종료
        return start
    mid = (start+end)//2
    rst = 0
    for item in cable:
        rst += (item//mid)
    # 자른 랜선이 필요한 수 보다 작으면 start부터 mid의 안에서 탐색
    if rst < N:
        return solve(start, mid)
    # 많으면 mid부터 end안에서 탐색
    else:  # rst >= N
        return solve(mid, end)


K, N = map(int, sys.stdin.readline().strip(' ').split())
cable = [int(sys.stdin.readline().strip(' ')) for _ in range(K)]

max_cable = max(cable)

print(solve(1, max_cable+1))
복사했습니다!