코딩테스트 문제풀이
[프로그래머스] 야근지수
지잉지잉
2021. 10. 6. 22:51
문제
풀이
import java.util.*;
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
PriorityQueue<Integer> pqWorks = new PriorityQueue<Integer>(Collections.reverseOrder());
int sum = 0;
for (int work : works) {
sum += work;
pqWorks.offer(work);
}
if (n > sum) return answer;
while (n > 0) {
Integer maxWork = pqWorks.poll();
n--;
pqWorks.offer(maxWork - 1);
}
answer = getOvertimeWorkingRate(pqWorks.toArray(new Integer[0]));
return answer;
}
public long getOvertimeWorkingRate(Integer[] remainWorks) {
long rate = 0;
for (int remainWork : remainWorks) {
rate += remainWork * remainWork;
}
return rate;
}
}
- 가장 많이 남은 일부터 1씩 뺀다.
- 이걸 array로 for문 돌려서 가장 큰 일을 찾아 -1씩 하니 효율성 시간초과.
- 우선순위큐로 구현하니 시간초과 안난다.
출처: https://programmers.co.kr/learn/courses/30/lessons/12927