< 처음 풀이 >
def solution(n, works):
answer = 0
for _ in range(n) :
works.sort(reverse=True)
works[0]-=1
if sum(works) <= 0 :
return 0
for i in range(len(works)) :
answer += works[i]**2
return answer
< 최종 풀이>
import heapq
def inverse(num) :
return -num
def solution(n, works):
answer = 0
# max_heap = list(map(lambda x : -x, works))
max_heap = list(map(inverse,works))
heapq.heapify(max_heap)
for _ in range(n) :
work = heapq.heappop(max_heap)+1
heapq.heappush(max_heap,work)
if sum(max_heap) >= 0 :
return 0
for work in max_heap :
answer+=(work**2)
return answer
정확도, 효율성 모두 통과
최대값을 찾는게 중요 → 최대힙 이용
n번만큼 최대값을 찾은 후 값을 1감소
퇴근 후 남은 작업량을 각각 제곱 후 더해서 리턴
max_heap 만드는 부분
제곱하는 부분
** 사용 → int로 반환
math 라이브러리의 pow() 메소드 사용 → float 형으로 반환
→ 첫번째 방식이 조금 더 빠르지만 상대적일뿐 둘 다 매우 빠른 속도라 상관 없다
→ 따라서 반환형에 맞춰 코드 작성하면 될 것 같다
결과
** 사용
lamda 사용 → 좀 더 좋은 듯
math.pow() 사용