728x90

푸는 방법은 생각을 했으나 max 를 매번 구해서 시간 초과가 났다. heapq 를 사용하면 시간 초과가 나지 않는다. 

 

  • heapq.heappush(heap, item) : item을 heap에 추가
  • heapq.heappop(heap) : heap에서 가장 작은 원소를 pop & 리턴. 비어 있는 경우 IndexError가 호출됨. 

 

 

def check(l):
 
    k = max(l)
 
    for i in range(0,len(l)):
        if l[i] == k:
            l[i]-=1
            break
 
 
    return l
 
    # for i in range(0,len(l)-1):
    #     if l[i]>l[i+1]:
    #         l[i]-=1
    #         break       
 
 
 
 
def solution(n, works):
    answer = 0
 
    # 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값
 
    if sum(works)<=n or len(works)==0:
        return 0
 
 
 
    # 앞 숫자를 바로 뒤 숫자와 같을 때 까지 빼기    
 
    count = 0       
 
    works = list(sorted(works, reverse = True))
 
    while True:
        works = check(works)
 
 
 
        count+=1
 
        if count == n:
            break
 
 
 
    for i in range(0,len(works)):
        answer += works[i]**2
 
 
 
    return answer
728x90

+ Recent posts