문제
https://programmers.co.kr/learn/courses/30/lessons/12927
풀이
Level3 이지만 체감 난이도는 Level1 느낌이다.
1. 모든 work를 최대힙에 담는다.
2. 야근 시간만큼 순회하면서 최대값을 가지는 원소를 poll하여 -1 한후 다시 offer하였다.
3. 이후 queue에 남은 원소를 제곱하여 합계를 내었다.
소스코드
import java.util.*;
import java.lang.*;
class Solution {
public long solution(int n, int[] works) {
PriorityQueue<Integer> que = new PriorityQueue<Integer>(new Comparator<Integer>(){
@Override
public int compare(Integer l1, Integer l2){
if(l1 - l2 > 0) return -1;
else if(l1 - l2 < 0) return 1;
else return 0;
}
});
for(int i = 0; i < works.length; i++){
que.offer(works[i]);
}
long answer = 0;
for(int i = 0; i < n; i++){
if(que.isEmpty()) break;
int work = que.poll();
if(work-1 > 0) que.offer(work-1);
}
while(!que.isEmpty()){
answer += Math.pow(que.poll(), 2);
}
return answer;
}
}
'💡Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 입국심사 (Java) (0) | 2021.10.29 |
---|---|
[프로그래머스] 2 x n 타일링 (Java) (1) | 2021.10.29 |
[프로그래머스] 추석 트래픽 (Java) (0) | 2021.10.29 |
[프로그래머스] 문자열 압축 (Java) (0) | 2021.10.25 |
[프로그래머스] N진수 게임 (Java) (0) | 2021.10.23 |