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;
}
}
'알고리즘' 카테고리의 다른 글
백준 11058번 크리보드 (JAVA) (0) | 2022.09.15 |
---|---|
프로그래머스 단어 변환 (JAVA) (0) | 2022.09.14 |
프로그래머스 카펫 (JAVA) (0) | 2022.09.12 |
프로그래머스 구명보트 (JAVA) (0) | 2022.09.11 |
프로그래머스 최고의 집합 (JAVA) (0) | 2022.09.10 |