프로그래머스 - 야근지수

greenTea·2023년 7월 19일
0
import java.util.*;

class Solution {
    public long solution(int n, int[] works) {
       Queue<Integer> queue = new PriorityQueue<>(Comparator.reverseOrder());
        for (int work : works) {
            queue.offer(work);
        }
        for (int i=0;i<n && queue.size()>=1;i++) {
             int e = queue.poll() - 1;
            if (e !=0)
                queue.offer(e);
        }
        
        return queue.stream().mapToLong(i -> (long) i *i).sum();
    }
}

🥳난이도 3치고는 간단한 문제입니다.
먼저 우선순위 큐를 선언해줍니다. 큐를 통해 해당 작업중 가장 많은 시간이 남은 작업량을 줄여줄 것입니다.

실제 계산을 해보시면 가장 큰 작업량을 줄일 경우에 야근 피로도가 최소가 되는 것을 확인 하실 수 있습니다.

🤔우선순위 큐에 해당 작업량을 넣어줍니다. 이후 poll을 해주면 가장 큰 값이 나오게 되는데 해당 작업량을 1을 줄여주고 다시 넣어줍니다. 이 때 0이 된 경우에는 넣어주지 넣어주지 않아도 됩니다.

😎이 후 해당 과정이 끝나면 제곱한 값을 더해서 넘겨주면 끝입니다.

출처 : 프로그래머스 스쿨

profile
greenTea입니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

이 글은 제게 많은 도움이 되었습니다.

답글 달기