알고리즘
프로그래머스 야근 지수 (JAVA)
박카스마시며코딩
2022. 9. 13. 16:36
https://school.programmers.co.kr/learn/courses/30/lessons/12927
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
저는 우선순위 큐를 통해 문제를 해결하였습니다.
제곱의 합은 낮을 수록 낮아지기 때문에 높은 수를 낮추도록 구현하였습니다.
우선순위 큐를 통해 높은 수를 꺼내고 이 값이 0 보다 크다면 1 줄이고 다시 우선순위 큐에 넣습니다.
위의 방법을 n번 동안 진행하고 우선순위 큐에 있는 값을 전부 꺼내어 합하여 해결하였습니다.
import java.util.*;
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
for(int work : works){
pq.offer(work);
}
for(int i = 0 ; i < n ; i++){
int num = pq.poll();
if(num > 0){
num--;
}
pq.offer(num);
}
while(!pq.isEmpty()){
int num = pq.poll();
answer += num * num;
}
return answer;
}
}