https://school.programmers.co.kr/learn/courses/30/lessons/12927
import heapq
def solution(n, works):
answer = 0
work_max_heap = []
if sum(works) <= n:
return 0
for work in works:
heapq.heappush(work_max_heap, (-work, work))
while n > 0:
popped = heapq.heappop(work_max_heap)
heapq.heappush(work_max_heap, (popped[0] + 1, popped[1] - 1))
n -= 1
for minus_work, work in work_max_heap:
answer += work**2
return answer
큰 수를 작게 줄여주는게 포인트다... 그건 알고 있어서 시도를 해봤지만 결국 실패해서 구글링 해봤다.
heapq를 사용해서 가장 큰 수를 계속 추적하고 1씩 깎는다. 그리고 제곱합을 구하면 된다..
생각보다 간단했다...