[level 3] 야근 지수 - 12927
문제 설명
회사원 Demi는 야근 피로도를 최소화하려 합니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다. Demi는 시간 동안 일할 수 있으며, 1시간에 작업량 1만큼을 처리할 수 있습니다.
남은 시간 과 각 일에 대한 작업량 배열 works가 주어질 때, 야근 피로도를 최소화한 값을 리턴하는 함수를 완성해 보세요.
제한 사항
- works의 길이는 1 이상 20,000 이하입니다.
- works의 원소는 50,000 이하인 자연수입니다.
- 은 1,000,000 이하인 자연수입니다.
입출력 예시
| works | n | result |
|---|---|---|
| [4, 3, 3] | 4 | 12 |
| [2, 1, 2] | 1 | 6 |
| [1, 1] | 3 | 0 |
입출력 예 설명
예시 1: 일 때, 작업량이 [4, 3, 3]이라면 가장 큰 수부터 줄여나가는 것이 효율적입니다. [2, 2, 2]로 만들면 피로도는 가 되어 최소가 됩니다.
구현 코드
import java.util.PriorityQueue;
import java.util.Collections;
class Solution {
public long solution(int n, int[] works) {
PriorityQueue<Integer> overtime = new PriorityQueue<>(Collections.reverseOrder());
for (int work : works) {
overtime.offer(work);
}
for (int i = 0; i < n; i++) {
int max = (int)overtime.poll();
if (max <= 0) break;
overtime.offer(max - 1);
}
return sumPow(overtime);
}
long sumPow(PriorityQueue<Integer> works) {
long sum = 0;
while (!works.isEmpty()) {
sum += Math.pow(works.poll(), 2);
}
return sum;
}
}
성능 요약
메모리: 68 MB, 시간: 188.39 ms
채점결과
정확성: 86.7
효율성: 13.3
합계: 100.0 / 100.0