코테 노트/프로그래머스

Level 3 야근지수 Python3

화요밍 2021. 8. 12. 23:58
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/12927?language=python3 

 

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

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

programmers.co.kr

 

최종 코드

 

GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음

프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

from heapq import heappop, heappush
def solution(n, works):
    if sum(works)-n <= 0: return 0
    max_heap = []
    for w in works:
        heappush(max_heap, (-w, w))
    while n > 0:
        root = heappop(max_heap)[1] - 1
        heappush(max_heap, (-root, root))
        n-=1
    return sum([w[1]**2 for w in max_heap])

풀이 과정

from heapq import heappop, heappush
def solution(n, works):
	#전체 작업량보다 남은 시간이 크거나 같은 경우, 모든 작업을 할 수 있다
    if sum(works)-n <= 0: return 0
    max_heap = []
    for w in works:
        heappush(max_heap, (-w, w))
    while n > 0:
    	#가장 작업량이 큰 일을 작업한다
        root = heappop(max_heap)[1] - 1
        #남은 작업량을 다시 힙에 넣어준다
        heappush(max_heap, (-root, root))
        n-=1
    return sum([w[1]**2 for w in max_heap])
#시간복잡도 = O(nlogn), 공간복잡도 = O(n)

 

728x90
반응형