728x90
from heapq import heapify, heappush, heappop
from collections import deque
def solution(n, works):
if n > sum(works):
return 0
works = [(-i,i) for i in works]
heapify(works)
for _ in range(n):
w = heappop(works)[1] - 1
heappush(works, (-w,w))
################
# print works
# while works:
# w = heappop(works)
# print(w)
return sum(i[1]**2 for i in works)
max value를 하나씩 -1 해줄 것이기 때문에 max heap를 구성해야함
따라서 input으로 (-i, i) 형태로 work를 만들어주고
heapify로 works를 heap으로 구성한다.
n번의 시행을 해야하기 때문에 n만큼 for loop
할때마다 pop으로 -w가 아니라 w를 꺼내야 하기때문에 [1]을 꺼내서 -1
다시 heap에 -w, w 형태로 넣어준다.
----
works의 element의 합이 n보다 작을 경우 음수가 나올 수 있기 때문에 조건을 맨앞에서 처리해준다.
++
배상문제와 같은 문제 link
728x90
'DC 2' 카테고리의 다른 글
[자료구조] 등굣길 파이썬 (DP) (0) | 2021.04.26 |
---|---|
[자료구조] 빙고 파이썬 (hash,list comprehension) (0) | 2021.04.26 |
[자료구조] 게임 아이템 파이썬 (heap, deque) (0) | 2021.04.25 |
[자료구조] 방문 길이 파이썬 (hash) (0) | 2021.04.24 |
[자료구조] FloodFill 파이썬 (BFS, queue) (0) | 2021.04.23 |
댓글