본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬]1654번 랜선 자르기

by 현장 2021. 5. 11.

-코드

from sys import stdin
k, n = map(int, input().split())
a = sorted([int(stdin.readline()) for _ in range(k)])
start = 1
end = sum(a) // n

while start <= end:
    mid = (start + end) // 2
    r = 0
    for l in a:
        r += l // mid
    if r >= n:
        start = mid + 1
    else:
        end = mid - 1
print(end)

처음에 그냥 for문으로 해결하려다 보니 시간 초과가 나서 분류를 보니까 이분 탐색문제 였습니다. 그래서 처음에 for문을 쓸 때, 사용했던 sum(a) // n을 end로 두고 start를 1로 두어서 만들려고 했는데 전에 이분탐색 문제를 풀긴했으나 응용이 안되어서 아래 if문을 잘 만들지를 못해서 이분 탐색문제를 많이 풀어서 응용이 가능하게 익숙해져야 할 필요성을 깨달았습니다.