1. 문제 풀이 아이디어
PriorityQueue
를 사용하여 문제를 해결할 수 있다.
2. 나의 정답 코드
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
PriorityQueue<Integer> que = new PriorityQueue<>(Comparator.reverseOrder());
for (int i : works) {
que.add(i);
}
while (n > 0) {
int cur = que.poll();
if (cur == 0)
break;
que.add(cur - 1);
n--;
}
for (int i : que) {
int cur = Math.max(i, 0);
answer += cur * cur;
}
return answer;
}
}
3. 정리
reverseOrder
를 사용하여 가장 큰 수부터 나오도록 하는PriorityQueue
자료형que
를 생성하고,works
의 값을 넣는다.
while
문을 사용하여n
이0
보다 큰 동안que
안의 가장 큰 값에서 1을 뺀 후 다시 넣는 과정을 반복한다.
- 마지막으로
que
에 있는 값들을 제곱하여 합산하면 답을 구할 수 있다.
Share article