https://school.programmers.co.kr/learn/courses/30/lessons/12927#qna
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
import java.util.*;
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
//works를 우선순위 큐에 넣자
for(int i=0;i<works.length;i++){
pq.add(works[i]);
}
while( n>0 && !pq.isEmpty()){
int tmp = pq.poll();
if(tmp != 1) pq.add(tmp-1); //제일 큰 값에서 1을 빼고 다시 넣어준다.
n--;
}
while(!pq.isEmpty()){
int tmp = pq.poll();
answer = answer + (tmp * tmp);
}
return answer;
}
}
우선순위 큐 내림차순 정렬을 꼭 기억해두자 !
1. 우선순위 큐에 작업 넣고
2. 제일 큰 값 부터 줄여간다. ( 남은 작업량의 제곱의 합이 야근지수이기 때문에 큰 수를 줄여야 야근지수가 작아질 수 있다)
3. n만큼 반복
4. 남은 작업량이 1이면 이번 차례에 작업을 마치는 것이므로, 큐에 넣지 않는다.
5. 반복이 완료되면 큐에 있는 것들 꺼내서 제곱해서 더해주면 끝
'알고리즘' 카테고리의 다른 글
[프로그래머스] PGS - 다음 큰 숫자 (0) | 2025.03.20 |
---|---|
[백준] BOJ2178 - 미로탐색 (JAVA) (0) | 2024.10.31 |
[PGS] 프로그래머스 - 여행경로 (JAVA) (0) | 2024.04.18 |
[프로그래머스] PGS - 게임 맵 최단거리 (0) | 2023.04.22 |
[백준] BOJ20920 - 영단어 암기는 괴로워 (JAVA) (0) | 2023.04.19 |