[풀이]

 

야근 피로도를 최소화 하는 문제다.

야근 피로도는 남은 작업량을 제곱하여 더한 값이기 때문에

남은 작업량 중에서 작업량이 가장 큰 값부터 빼주면 된다.

 

따라서 우선순위 큐를 사용했는데 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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

+ Recent posts