[풀이]
야근 피로도를 최소화 하는 문제다.
야근 피로도는 남은 작업량을 제곱하여 더한 값이기 때문에
남은 작업량 중에서 작업량이 가장 큰 값부터 빼주면 된다.
따라서 우선순위 큐를 사용했는데 reverseOrder를 사용해 내림차순이 되도록 하였다.
해당 큐에 남은 작업량들을 넣어주어 가장 큰 값부터 1씩 빼주도록 하였다
해당 작업을 퇴근까지 남은 시간인 N번만큼 수행하도록 하였다.
위의 작업들을 마무리 하고 큐에 남은 값들을 제곱들하여 다 더해주었다.
[코드]
import java.util.Collections;
import java.util.PriorityQueue;
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
PriorityQueue<Integer> leftWork = new PriorityQueue<>(Collections.reverseOrder());
for(int work : works) {
leftWork.offer(work);
}
for(int idx=0;idx<n;idx++){
if(leftWork.size() == 0) break;
int work = leftWork.poll() - 1;
if(work > 0) {
leftWork.offer(work);
}
}
for(int work : leftWork){
answer += work*work;
}
return answer;
}
}
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/12927
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 입국심사 (JAVA) (0) | 2024.12.10 |
---|---|
[프로그래머스] 섬 연결하기 (JAVA) (2) | 2024.12.09 |
[프로그래머스] 이모티콘 할인 행사 (JAVA) (0) | 2024.12.09 |
[프로그래머스] 도넛과 막대 그래프 (JAVA) (0) | 2024.12.09 |
[프로그래머스] 가장 많이 받은 선물 (JAVA) (2) | 2024.12.08 |