[프로그래머스] 야근 지수(Python)

알고리즘 저장소·2021년 2월 25일
0

프로그래머스

목록 보기
11/29

1. 요약

1시간에 작업량 1을 처리하는 Demi가 N시간 동안 남아 있는 일들을 하려고 한다.
야근 피로도를 남아있는 일들의 제곱의 합이라고 정의 할 때, 야근 피로도의 최소 값을 구해야한다.

2. 아이디어

N시간 동안 일을 하고나서 남아 있는 일들이 [a,b,c,d]라고 할 때, 야근 피로도가 최소가 되려면 a, b, c, d간의 차이가 거의 없어야 한다.(이상적인 경우는 a=b=c=d)
다시 말해, 야근을 시작할 때, 작업량이 가장 큰 것을 먼저 처리한다.
위의 내용을 heap으로 구현한다. 이 때, pythonheap모듈은 최소 힙만 지원하므로 부호를 바꿔서 구현해야한다.


3. 코드

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

0개의 댓글