import sys
input=sys.stdin.readline
M,N=map(int,input().split()) #M은 조카의 수 , N은 과자의 수
L=sorted(list(map(int,input().split()))) #과자 리스트
start=1
end=max(L)
while start<=end:
count=0
mid=(start+end)//2
for i in range(len(L)):
count+=L[i]//mid
if count>=M:
start=mid+1
else:
end=mid-1
print(end)
📌 시작점과 끝점을 어떻게 잡을것인가?
1 ≤ L1, L2, ..., LN ≤ 1,000,000,000 범위를 따라서📌 어떻게 탐색할 것인가?
start=1 , end=max(L)로 잡은뒤 , count 변수를 선언해서 모든 리스트에 대해 막대길이를 mid값으로 나눈 몫을 더해준다.
막대길이가 mid값보다 작으면 0이 더해지므로 모든 조카에게 같은 길이의 막대과자를 나눠줄 수 없다면, 0을 알아서 출력한다.
막대길이가 mid값보다 크면 그 몫을 더해주고 count 값이 조카수보다 클때는 막대길이를 너무 작게 짤랐기 때문에 start 값을 증가시킨다.
나눠줄수있는 막대길이의 최대값을 구하기 때문에 end 변수를 출력한다.