1시간에 작업량 1을 처리하는 Demi가 N
시간 동안 남아 있는 일들을 하려고 한다.
야근 피로도를 남아있는 일들의 제곱의 합이라고 정의 할 때, 야근 피로도의 최소 값을 구해야한다.
N
시간 동안 일을 하고나서 남아 있는 일들이[a,b,c,d]
라고 할 때, 야근 피로도가 최소가 되려면a, b, c, d
간의 차이가 거의 없어야 한다.(이상적인 경우는a=b=c=d
)
다시 말해, 야근을 시작할 때, 작업량이 가장 큰 것을 먼저 처리한다.
위의 내용을heap
으로 구현한다. 이 때,python
의heap
모듈은 최소 힙만 지원하므로 부호를 바꿔서 구현해야한다.
from heapq import heapify, heappop, heappush
def solution(n, works):
answer = 0
size = len(works)
works = [-works[i] for i in range(size)]
heapify(works)
while n:
x = heappop(works)
if x == 0:
heappush(works, 0)
break
x += 1
heappush(works, x)
n -= 1
works = [works[i]**2 for i in range(size)]
answer = abs(sum(works))
return answer