1) 입력으로 주어진 시간(no)내에 works를 전부 처리할 수 있으면, 초장에 return 0
2) works에서 제일 오래 걸리는 시간부터 1시간씩 차감해야되서, max-heap을 사용!
3) works를 순회하여 (-work, work)형태로 다시 재정비 (max-heap을 만들기 위해 -work가 튜플 앞에 나온다.)
4) heapify로 works를 힙으로 만든다.
5) 주어진 시간(no)만큼의 횟수를 반복시킨다.
6) max-heap(works)에 첫번째에서 1을 빼고 다시 넣는다.
7) 반복이 끝나면 제곱의 형태로 원소를 재정비하고 sum으로 전부 더한 값을 리턴한다.
import heapq
def solution(no, works):
if no > sum(works) :
return 0
answer = 0
works = [(-work, work) for work in works]
heapq.heapify(works)
for _ in range(no):
max_val = heapq.heappop(works)[1] - 1
heapq.heappush(works, (-max_val, max_val))
return sum([ work ** 2 for _, work in works])