코딩하는 해맑은 거북이

[Python] 랜선 자르기 - 백준 (이진탐색) 본문

코딩테스트

[Python] 랜선 자르기 - 백준 (이진탐색)

#CJE 2024. 1. 4.
해당 글은 백준 1654번 '랜선 자르기' 문제를 다룬다.

문제

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

 

1654번: 랜선 자르기

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

www.acmicpc.net

 

설명

해당 문제는 이진탐색으로 O(logN)의 시간복잡도로 해결할 수 있는 문제이다.

이전에 풀었던 나무자르기 이진탐색 문제와 비슷한데, 다른 점은 count를 mid로 나눈 몫의 갯수로 구하므로 mid가 0이 되지 않도록 start는 1부터 진행해야 한다.

 

코드

k, n = map(int, input().split())
arr = [int(input()) for _ in range(k)]

start, end = 1, max(arr)
result = 0
while start <= end:
    mid = (start+end)//2
    count = 0
    for i in range(k):
        count += (arr[i]//mid)

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

     

 

 

Comments