하루에 한 문제

[프로그래머스] 야근지수 -Java 본문

알고리즘/프로그래머스

[프로그래머스] 야근지수 -Java

dkwjdi 2020. 12. 29. 20:21

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

 

코딩테스트 연습 - 야근 지수

회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다. Demi는 N시간 동안 야근 피로도

programmers.co.kr

import java.util.PriorityQueue;
class Solution {
	    public long solution(int n, int[] works) {
	        long answer = 0;
	        PriorityQueue<Integer> maxPq=new PriorityQueue<Integer>((o1,o2)->(o2-o1));
	        long sum=0;
	        
	        for(int i=0; i<works.length; i++) {
	        	maxPq.offer(works[i]);
	        	sum+=works[i];
	        }
	        
	        if(sum<=n) return 0;
	        
	        for(int i=0; i<n; i++) {
	        	int work=maxPq.poll();
	        	maxPq.offer(--work);
	        }
	        
	        while(!maxPq.isEmpty()) {
	        	answer+=Math.pow(maxPq.poll(), 2);
	        }
	        
	        return answer;
	    }
	}

 

소요시간 : 10분

 

야근 지수를 최소화하기 위해서는 가장 큰 작업량을 계속해서 줄여주면 됩니다!

 

7,1,1 ( 49 + 1 + 1) = 51

5,2,2 ( 25 + 4 + 4) = 34

 

두개의 숫자의 합은 9로 같지만 야근지수는 제곱을 해서 더하기 때문에 가장 큰 수를 줄여주면 됩니다!

Comments