본문 바로가기

개발/algorithm

[프로그래머스][level3] 야근 지수 -python

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/12927

 

코딩테스트 연습 - 야근 지수

회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다. Demi는 N시간 동안 야근 피로도

programmers.co.kr

풀이 

  • 최대힙 문제 - 파이썬은 최소힙만 지원해주므로 부호 변경하여 최대힙 구현 
  • 작업량이 가장 큰 일부터 n이 0이 될 때까지 처리 
  • 처리할 일이 없으면 while 문 빠져나감 
import heapq

def solution(n, works):
  answer = 0
  heap = []

  # 파이썬은 최소힙만 지원해주므로 부호를 변경하여 최대힙 구현 
  for num in works:
    heapq.heappush(heap,-num)

  # n이 0일 때까지 
  while n > 0:
    work = heapq.heappop(heap)
   
   # 작업량이 가장 많이 남은 일이 0이면 남은 작업 모두 0이라는 뜻이므로 break
    if work == 0 :
      break

    # 1만큼 작업 처리 
    work += 1
    # n 줄이기
    n -= 1

    heapq.heappush(heap,work)

  for i in heap:
    answer += i*i

  return answer