3Level 야근 지수

이하연·2021년 8월 15일
0

2021알고리즘

목록 보기
13/32
  • < 처음 풀이 >

    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
    • 정확도 통과, 효율성 0점
    • 최대값을 찾아 -1씩 한 후 sort하는 과정하는 것이 시간소모 많이 됨
  • < 최종 풀이>

    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 만드는 부분

      • inverse 함수를 따로 생성하여 만들기
      • lambda 이용하여 만들기
    • 제곱하는 부분

      • ** 사용 → int로 반환

      • math 라이브러리의 pow() 메소드 사용 → float 형으로 반환

        → 첫번째 방식이 조금 더 빠르지만 상대적일뿐 둘 다 매우 빠른 속도라 상관 없다

        → 따라서 반환형에 맞춰 코드 작성하면 될 것 같다

    • 결과

      • ** 사용

        • lamda 사용 → 좀 더 좋은 듯

      • math.pow() 사용

0개의 댓글