프로그래머스__[문제풀이: lv2. 배상 비용 최소화]

Jaewon Lee·2021년 8월 5일
0

Algorithm

목록 보기
18/36
post-thumbnail

On.


Algorithm


1. 수도코드

1) 입력으로 주어진 시간(no)내에 works를 전부 처리할 수 있으면, 초장에 return 0

2) works에서 제일 오래 걸리는 시간부터 1시간씩 차감해야되서, max-heap을 사용!

3) works를 순회하여 (-work, work)형태로 다시 재정비 (max-heap을 만들기 위해 -work가 튜플 앞에 나온다.)

4) heapify로 works를 힙으로 만든다.

5) 주어진 시간(no)만큼의 횟수를 반복시킨다.

6) max-heap(works)에 첫번째에서 1을 빼고 다시 넣는다.

7) 반복이 끝나면 제곱의 형태로 원소를 재정비하고 sum으로 전부 더한 값을 리턴한다.


2. 구현코드

import heapq

def solution(no, works):
    if no > sum(works) :
        return 0
    
    answer = 0
    
    works = [(-work, work) for work in works]
    heapq.heapify(works)
    
    for _ in range(no):
        max_val = heapq.heappop(works)[1] - 1
        heapq.heappush(works, (-max_val, max_val))
    
    return sum([ work ** 2 for _, work in works])
        

3. 배운 점

  • heap을 (-값, 값)형태로 넣어주게 되면 큰 값이 가장 앞에 나오게 되는 max-heap을 만들 수 있다.


Off.


프론트와 백을 넘나드는 리드 개발자가 되는 그날까지 🔥🔥🔥

profile
Communication : any

0개의 댓글