본문 바로가기

코딩테스트 준비/[백준]

[백준] 1654 - 랜선 자르기 (파이썬)

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

 

1654번: 랜선 자르기

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

www.acmicpc.net

 

[코드]

import sys

K, N = map(int, input().split())
lan_cables = []
for i in range(K):
    lan_cables.append(int(sys.stdin.readline()))

left = 1
right = max(lan_cables)
mid = (left + right) // 2

total_sliced_cables_num = 0

while left <= right:
    for cable in lan_cables:
        total_sliced_cables_num += cable // mid

    # 길이가 너무 짧음
    if total_sliced_cables_num >= N:
        left = mid + 1
        mid = (left + right) // 2
    # 길이가 너무 김
    else: 
        right = mid - 1
        mid = (left + right) // 2
    total_sliced_cables_num = 0
    
print(mid)