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이 될 수 없게끔 해야 한다.