알고리즘/프로그래머스
[프로그래머스] 야근 지수 (파이썬)
엉아_
2021. 12. 24. 00:14
728x90
📕 문제
https://programmers.co.kr/learn/courses/30/lessons/12927
코딩테스트 연습 - 야근 지수
회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다. Demi는 N시간 동안 야근 피로도
programmers.co.kr
💡 풀이법
1. 항상 그 순간 가장 작업량이 많은 작업을 해야하기 때문에 계속 큰 값이 나오도록 하는 자료구조인 heap을 이용했다.
2. 최대힙은 없기 때문에 최소힙을 변형해서 최대힙을 만들었다.
3. n까지 for문을 돌면서 매 순간마다 작업량이 최대인 작업을 빼서 작업량이 줄이고 다시 heap에 넣는것을 반복한다.
import heapq
def solution(n, works):
heapq.heapify(works)
answer = 0
max_heap = []
for i in works:
heapq.heappush(max_heap, (-i, i))
for _ in range(n):
if max_heap[0][1] == 0:
break
i = heapq.heappop(max_heap)[1]-1
heapq.heappush(max_heap,(-i,i))
answer = sum([i[1]**2 for i in max_heap])
return answer