[python][백준 1654] 랜선 자르기

Dawon Seo·2023년 9월 11일
0
post-thumbnail

1. 문제

📌 문제 보러 가기!

2. 접근법

간단한 이분탐색 문제이다.

left = 1
right = sum(li) // N

left를 1, right를 전체 랜선을 이어 붙였을 때 나올 수 있는 개수로 지정한 뒤
이분탐색 진행한다.

if tmp < N:
    right = mid - 1
else:
    left = mid + 1

나올 수 있는 랜선의 길이가 N개보다 작다면 더 작은 길이로 나눠야 하기 때문에 right를 mid - 1로 만들어 다시 진행한다.
나올 수 있는 랜선의 길이가 N개보다 크거나 같다면 나올 수 있는 더 큰 길이를 탐색하기 위해 left를 mid + 1로 만들어 다시 진행한다.
left가 right보다 커졌을 경우 반복문을 중단하며, right(나올 수 있는 최대값)를 출력한다

3. 전체 코드

K, N = map(int, input().split())
li = []

for _ in range(K):
    li.append(int(input()))

left = 1
right = sum(li) // N
mid = (left + right) // 2

while left <= right:
    mid = (left + right) // 2
    tmp = 0
    for i in li:
        tmp += i // mid

    if tmp < N:
        right = mid - 1
    else:
        left = mid + 1

print(right)

0개의 댓글