https://school.programmers.co.kr/learn/courses/30/lessons/12927
피로도를 최소화 하려면, 남은 작업량을 최대한 평탄화 하면 된다.
e.g. [4,3,3] 일 때 가능한 n에 대해 [2,2,2], [2,2,1], [2,1,1] 등이 목표
이를 위해, 항상 가장 많이 남은 작업을 낮춰준다. => 그리디
매 순간 남은 작업 중 가장 큰 숫자 (작업량)를 판별해야 하므로, 정렬 대신 내림차순 우선순위 큐를 쓴다.
import java.util.*;
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
PriorityQueue<Integer> workQueue = new PriorityQueue<>(Comparator.reverseOrder());
Arrays.stream(works).forEach(workQueue::offer);
while(n > 0 && !workQueue.isEmpty()) {
int w = workQueue.poll();
if(w > 1) {
workQueue.offer(--w);
}
n--;
}
while(!workQueue.isEmpty()) {
int w = workQueue.poll();
answer += Math.pow(w, 2);
}
return answer;
}
}
'[프로그래머스] 절대 외부 IDE를 써선 안돼 > Java' 카테고리의 다른 글
[lv3] 숫자 게임 (0) | 2024.11.04 |
---|---|
[lv3] 최고의 집합 (0) | 2024.11.04 |
[lv3] 입국심사 (0) | 2024.10.19 |
[lv2] 전력망을 둘로 나누기 (1) | 2024.10.16 |
[lv2] 모음사전 (0) | 2024.10.15 |