코딩테스트/BOJ

[백준][이분 탐색] 1654. 랜선 자르기

박소민 2024. 9. 9. 17:57
1654. 랜선 자르기

 

  • 내 풀이
    • 랜선 최소 길이가 1부터 인것 주의
    • 2792. 보석상자랑 거의 똑같은 문제
      • ⚠️ 계산 과정에서 다르게 생각해야 할점
        • tmp를 구하는 과정이 2792는 math.ceil로 0.5도 1인으로 치면서 계산했다면
        • 1654는 남는 랜선을 자르는 방식이어서 lan//mid 몫으로만 계산한다는 차이가 있음
    • 구해야 하는 값을 이분탐색으로 범위를 좁혀나가면서 되는지 확인해보는 것
k, n = map(int, input().split())
lans = []
for _ in range(k):
    lans.append(int(input()))

l = 1 #랜선 최소 길이 0으로 하면 에러 
r = max(lans)

ans = 0
while l <= r:
    mid = (l+r)//2

    tmp = 0
    for lan in lans:
        tmp += lan//mid

    if tmp < n:
        r = mid-1
        continue

    ans = max(ans, mid)
    l = mid+1

print(ans)