놀러온 조카들이 싸우지 않으면서 최대한 오래 떼를 쓰지 않도록 막대과자 길이를 최대로 하여 나눠주는 방법을 찾는 문제입니다.
나눠줄 수 있는 막대과자의 최소길이, 최대길이를 범위로 하여
이분탐색을 진행하는 간단한 문제입니다.
def main():
M, N = map(int, input().split())
sticks = list(map(int, input().split()))
start = 1
end = max(sticks)
while start <= end:
mid = (start + end) // 2
count = 0
for stick in sticks:
count += (stick // mid)
if count < M:
end = mid - 1
else:
start = mid + 1
print(end)
if __name__ == "__main__":
main()
start
를 0으로 초기화 한 문제로 ZeroDivisionError
가 발생하였습니다.
문제에 나와있는대로 같은 길이의 과자를 나눠줄 수 있는 경우가 없다면 0을 출력해야하는 조건때문에
위와같이 start = 0
으로 초기화 하는 실수를 하였습니다.
막대과자 길이를 1로 해도 모든 조카들에게 나눠줄 수 없다면 결과적으로 end = 1 - 1 = 0
이 됩니다.
다시 한번 초기화의 중요성을 느낄 수 있었습니다.