로직과의 사투/Algorithm

백준 알고리즘 1654번 랜선 자르기 - 파이썬

www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net

이진탐색을 통해 해결하는 방법을 바로 떠올리고 곧장 입력한 뒤 제출 하였으나 계속 검사 80%선에서 Zero Division Error 가 발생하였다. 반례를 혼자 찾기 힘들고 원인이 떠오르지 않아 구글링을 통해 k = 1, n = 1 data = [1] 인 경우 start를 0부터 설정할 시 mid 가 0이 되는 오류를 발견하고 start를 1로 수정하였다.

k, n = map(int, input().split())

data = [int(input()) for _ in range(k)]

data.sort()

start = 1
end = data[-1]
result = 0
while start <= end:
    mid = (start + end) // 2
    count = 0
    for i in data:
        count += (i // mid)

    if count >= n:
        start = mid + 1
        result = max(result, mid)
    else:
        end = mid - 1

print(result)