문제 정보

풀이

야근 지수는 ‘야근을 시작하는 시점에 남은 일의 작업량을 제곱해서 더한 값’이다.

제곱해서 더하기 때문에, ‘제일 큰 값’을 줄이는 게 중요하다.

매번 정렬하면 시간이 오래 걸리므로, 우선순위 큐를 사용했다. (기본적으로 최소 힙으로 동작하므로)

코드

import java.util.*;
 
class Solution {
    public long solution(int n, int[] works) {
        int sum = Arrays.stream(works).sum();
        
        if (sum < n)
            return 0;
        
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
        long answer = 0;
        
        for(int work : works)
            pq.add(work);
        
        for(int i = 0; i < n; i++)
            pq.add(pq.poll() - 1);
        
        while(!pq.isEmpty())
            answer += Math.pow(pq.poll(), 2);
        
        return answer;
    }
}