https://programmers.co.kr/learn/courses/30/lessons/12927
처음에는 works중에서 가장 큰 수를 찾아 그 일을 하게 되면 야근 피로도를 최소화 할 수 있다고 생각하고 접근하였다
from functools import reduce
def solution(n, works):
answer = 0
for i in range(n):
max_num = max(works)
if max_num == 0:
break
max_idx = works.index(max_num)
works[max_idx] -= 1
return reduce(lambda acc , cur: acc + pow(cur,2), works, 0)
결과는... 효율성에서 실패

혹시... max함수가 시간을 많이 잡아먹는가 해서 heapq를 사용
결과는... 성공!
from functools import reduce
import heapq
def solution(n, works):
answer = 0
new_works = [[-work, work] for work in works]
heapq.heapify(new_works)
for i in range(n):
search = heapq.heappop(new_works)
if search[0] == 0:
break
heapq.heappush(new_works, [search[0] + 1, search[1] - 1])
return reduce(lambda acc , cur: acc + pow(cur[1],2), new_works, 0)

생각보다 max함수가 시간을 많이 잡아먹는걸 느꼈다.
다른 코드 참고하니 sort로 해결하신 분들이 많았다. 앞으로는 최대, 최소문제도 heap이나 sort이용하는 걸로