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

이건회·2022년 1월 28일
0

백준

목록 보기
5/15

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

런타임 에러 때문에 하루를 고생한 문제다. 먼저 런타임 에러가 났던 코드는

import sys
k,n=map(int,sys.stdin.readline().split())
length=[]
for _ in range(k):
  length.append(int(sys.stdin.readline()))
length.sort()
start=0
end=max(length)
result=0

while(start<=end):
  total=0
  mid=(start+end)//2
  for i in length:
    if i>=mid:
      total+=i//mid
  if total>=n:
    result=mid
    start=mid+1
  else: #total<n
    end=mid-1

print(result)

런타임 에러가 난 이유는
total+=i//mid 라는 식을 세웠으므로
반드시 mid가 0이 되면 안되는 조건이 있어야 하는데,
내가 start 변수를 초기에 0으로 설정했기 때문에 end가 0이 되면 mid가 0이 될 수 있는 가능성이 있기 때문이다.
따라서

import sys
k,n=map(int,sys.stdin.readline().split())
length=[]
for _ in range(k):
 length.append(int(sys.stdin.readline()))
length.sort()
start=1
end=max(length)
result=0

while(start<=end):
 total=0
 mid=(start+end)//2
 for i in length:
   if i>=mid:
     total+=i//mid
 if total>=n:
   result=mid
   start=mid+1
 else: #total<n
   end=mid-1

print(result)

이렇게 start의 초기값을 1로 설정해서 절대 mid가 0이 될 수 없게끔 해야 한다.

profile
하마드

0개의 댓글