chyam

[백준] 1654번, python - 랜선 자르기 본문

백준

[백준] 1654번, python - 랜선 자르기

chyam_eun 2025. 12. 26. 22:58

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

def solution():
    k, n = map(int, input().split())
    li = [int(input()) for _ in range(k)]

    left = 1
    right = max(li)

    while left < right - 1:
        mid = (left + right) // 2
        total = 0 # 최대 개수

        for x in li:
            total += x // mid

        if total >= n: # 최대 개수가 기준보다 크면 
            left = mid
        else:
            right = mid

    total = sum(x // right for x in li)
    if total >= n:
        print(right)
    else:
        print(left)

solution()

 

아래는 지피티가 추천해준 깔끔한 풀이입니다!

def solution():
    k, n = map(int, input().split())
    li = [int(input()) for _ in range(k)]

    left = 1
    right = max(li)
    answer = 0

    while left <= right:
        mid = (left + right) // 2
        total = sum(x // mid for x in li)

        if total >= n:
            answer = mid
            left = mid + 1
        else:
            right = mid - 1

    print(answer)

solution()