import bisect
def solution(n, works):
works.sort()
for _ in range(n) :
max_num = works.pop(-1)
if max_num < 1 :
return 0
bisect.insort_left(works, max_num-1)
return sum(x**2 for x in works)
제곱합의 최소화
남은 작업량들의 제곱합이 피로도인데 이 제곱합을 최소화 하려면 남은 작업량들의 분산을 줄이면 된다. 즉 작업량 중 가장 큰놈부터 1시간씩 작업 해나가면 된다.
import bisect
def solution(n, works):
works.sort()
for _ in range(n) :
max_num = works.pop(-1) # 작업량 가장 많은 놈
if max_num < 1 :
return 0
bisect.insort_left(works, max_num-1) # 작업량 가장 많은놈 -1 해서 insort
return sum(x**2 for x in works)