알고리즘/프로그래머스
[프로그래머스] 야근 지수 Java 풀이 및 해설
승민아
2024. 5. 2. 12:13
https://school.programmers.co.kr/learn/courses/30/lessons/12927
풀이 방법
N을 가지고 최대값을 작게 만드는것이 누적 피로도를 작게 할 수 있는 방법이다.
그래서 우선순위 큐를 통해 pop하여 최대값을 갖는 작업을 1시간씩 작업하면 된다.
전체 코드
import java.util.*;
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(Collections.reverseOrder());
for(int i=0; i<works.length; i++) {
pq.add(works[i]);
}
while(n>0) {
Integer work = pq.poll();
if(work>0) {
pq.add(work-1);
} else { // 최대값이 0이라면 더이상 큐를 도는것은 의미 없음.
break;
}
n--;
}
while(pq.size() > 0) {
Integer a = pq.poll();
answer += a*a;
}
return answer;
}
}