이번에 풀어본 문제는
프로그래머스 야근 지수 입니다.
import java.util.*;
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
Queue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
int total = 0;
for (int work : works) {
pq.add(work);
total += work;
}
if (total <= n) return 0;
while (n-- > 0) {
pq.add(pq.poll() - 1);
}
for (int num : pq) {
answer += Math.pow(num, 2);
}
return answer;
}
}
n시간 동안 시간당 1만큼 남은 작업량을 처리한다고 할 때, 야근 지수를 최소화 하여 출력하는 문제입니다. 야근 지수는 작업량의 제곱수에 따라 증가하므로, 남은 작업량중 최댓값을 지속해서 줄여주면 결과적으로 값이 줄어들 것이라 예상했습니다.
따라서 우선순위 큐에 works 배열을 모두 담아주고, 최댓값을 1씩 감소시켜주어 최종 결과를 출력했습니다.
문제 이름이 마음에 안들었지만, 어렵지 않게 해결해서 다행입니다 ^^