문제
https://school.programmers.co.kr/learn/courses/30/lessons/12927
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
문제를 보고서 제곱이라는 행위에 대해 생각해보았다.
단순히 3의 제곱과 4의 제곱을 살펴만 봐도 9와 16, 약7의 차이가 나는것을 알 수 있다.
따라서 작은값을 0에 가깝게 만드는 행위보다, 큰 값들부터 줄여서 평균을 낮추는 방식으로 문제를 풀이해야 한다.
남은 일 중에 가장 큰 값을 꺼내서 일을 수행하고, 다시 넣어준다.
이 과정을 일이 없거나, 퇴근할 때 까지 반복하면 된다.
최대힙을 사용하여 큰 값을 찾고, 일이 끝나지 않았다면 다시 넣어주면 된다.
코드
import java.util.*;
class Solution {
public long solution(int n, int[] works) {
long answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>((x, y) -> y-x);
for(int i=0; i<works.length; i++)
pq.add(works[i]);
while(pq.peek() != null && n != 0){
int val = pq.poll();
val--;
n--;
if(val != 0) pq.add(val);
}
while(pq.peek() != null){
int val = pq.poll();
answer += (val * val);
}
return answer;
}
}
후기
무난한 문제였다.
'프로그래머스' 카테고리의 다른 글
LV3 모음사전 (Java) (1) | 2023.11.23 |
---|---|
LV3 최고의 집합 (Java) (1) | 2023.11.22 |
LV2 게임 맵 최단거리 (Java) (0) | 2023.11.20 |
LV3 네트워크 (Java) (0) | 2023.11.20 |
LV3 이중우선순위큐 (0) | 2023.11.18 |