728x90
<우선순위 큐 활용한 문제풀이>
import java.util.*;
class Solution {
public long solution(int n, int[] works) {
int totalWorks = 0;
long totalFatigue = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
//1.남은일의 총 합 = totalWorks
//2.우선순위큐에 남은 일을 넣어줌
for (int work : works) {
totalWorks += work;
pq.add(work);
}
//totalWorks가 n(Demi가 처리할 수 있는 일의 양) 보다 작거나 같을 경우 야근 x
if(totalWorks<=n){
return totalFatigue;
}
//n이 1보다 크거나 작은 경우 우선순위큐의 최대힙 -1 을 n만큼 반복
while(n>=1){
if (pq.peek()>0){
int mh =pq.poll()-1;
pq.add(mh);
n--;
} else break;
}
//totalFatigue = 남은 잔업량의 제곱
for (int fatigue: pq){
if (fatigue!=0){
totalFatigue += Math.pow(fatigue,2);
}
}
return totalFatigue;
}
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
최댓값과 최솟값(Lv.2)[프로그래머스] (0) | 2022.09.24 |
---|---|
[1차]캐시 2018 KAKAO BLIND RECRUITMENT(Lv.2)[프로그래머스] (0) | 2022.09.22 |
이중우선순위큐(Lv.3)[프로그래머스] (0) | 2022.09.20 |
최솟값 만들기(Lv.2)[프로그래머스] (0) | 2022.09.19 |
이진 변환 반복하기(Lv.2)[프로그래머스] (0) | 2022.09.19 |