import java.util.*;
class Solution {
public long solution(int n, int[] works) {
Queue<Integer> queue = new PriorityQueue<>(Comparator.reverseOrder());
for (int work : works) {
queue.offer(work);
}
for (int i=0;i<n && queue.size()>=1;i++) {
int e = queue.poll() - 1;
if (e !=0)
queue.offer(e);
}
return queue.stream().mapToLong(i -> (long) i *i).sum();
}
}
🥳난이도 3치고는 간단한 문제입니다.
먼저우선순위 큐
를 선언해줍니다. 큐를 통해 해당 작업중 가장 많은 시간이 남은 작업량을 줄여줄 것입니다.실제 계산을 해보시면 가장 큰 작업량을 줄일 경우에 야근 피로도가 최소가 되는 것을 확인 하실 수 있습니다.
🤔
우선순위 큐
에 해당 작업량을 넣어줍니다. 이후poll
을 해주면 가장 큰 값이 나오게 되는데 해당 작업량을 1을 줄여주고 다시 넣어줍니다. 이 때 0이 된 경우에는 넣어주지 넣어주지 않아도 됩니다.😎이 후 해당 과정이 끝나면 제곱한 값을 더해서 넘겨주면 끝입니다.
출처 : 프로그래머스 스쿨
이 글은 제게 많은 도움이 되었습니다.