[백준] 이진 탐색 1654:랜선 자르기

백지원·2023년 8월 8일
0
import sys
input = sys.stdin.readline

K, N = map(int, input().split())
lan = [int(input()) for _ in range(K)]
max_length = max(lan)
min_length = 1
while min_length <= max_length:
    length = (min_length+max_length)//2
    cnt = 0
    for e in lan:
        cnt += e//length
    if cnt < N: # 개수가 모자람 -> 길이를 더 짧게
        max_length = length-1
    else: # cnt >= N 이므로 일단 만족. 개수가 많음 -> 길이를 더 길게
        min_length = length+1
print(max_length)

간단한 이분 탐색 문제이다.
실버Ⅱ2805:나무 자르기와 완전 똑같다.

이 문제에서 주의할 점을 하나 짚어보자면,
cnt += e//length 부분에서 length가 0일 때 런타임 에러(ZeroDivisionError)가 발생한다.
때문에 min_length를 0이 아니라 1로 설정해 주도록 한다.🙂

0개의 댓글