ALGORITHM/PROGRAMMERS

[프로그래머스] 야근 지수

0298 2021. 9. 6. 21:59

https://programmers.co.kr/learn/courses/30/lessons/12927?language=java 

 

코딩테스트 연습 - 야근 지수

회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다. Demi는 N시간 동안 야근 피로도

programmers.co.kr

2021-09-06


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.*;
class Solution {
    public long solution(int n, int[] works) {
        long answer = 0;
        PriorityQueue<Long> pq = new PriorityQueue<>(Comparator.reverseOrder());
        for(int i = 0; i < works.length; i++) pq.add((long) works[i]);
 
        while(!pq.isEmpty()) {
            long val = pq.poll();
            if(val - 1 > 0) pq.add(--val);
            n--;
            if(n == 0break;
        }
        
        while(!pq.isEmpty()) {
            answer += Math.pow(pq.poll(), 2);
        }
 
        return answer;
    }
}
cs

#문제풀이 

가장 큰 값을 계속 쳐내주는게 좋다. 그래서 priorityqueue를 reverseorder로 해놓고 poll()한 값을 계속 n만큼 깎아줬다.