본문 바로가기

알고리즘 공부 및 문제 풀이/프로그래머스(PRO)

[pro] 프로그래머스 level3 12927 야근 지수 (Java) - 우선순위 큐

[문제]

https://school.programmers.co.kr/learn/courses/30/lessons/12927

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[풀이]

우선순위 큐를 오름차순 반환하도록 설정한다.

가장 큰 작업량에 대해서 n번 1씩 감소시키면 야근 지수를 최소화할 수 있다. 

 

[코드]

 

import java.util.*;

class Solution {
    public long solution(int n, int[] works) {
        long answer = 0;
        //야근 피로도를 최소화한 값을 리턴
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
        for(int w:works){
            pq.add(w); //내림차순 정렬
        }
        
        while(n!=0){
            int max = pq.poll();
            max--;
            if(max!=0){
                pq.add(max);
            }
            if(pq.isEmpty()){
                return 0;
            }
            n--;
        }
        
        while(!pq.isEmpty()){
            int num = pq.poll();
            answer += (long)num*num;
        }
        
        return answer;
    }
}