Geisha 2024. 9. 22. 01:12

https://school.programmers.co.kr/learn/courses/30/lessons/12927?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

//heap 구조 사용하면 될거같다.
//priorityqueue
//다집어넣고 최대힙 수정
//n 떨어질때까지 같은숫자로 만들어주기 
//n 떨어지면 얼마가 남았는지 말하기 
// 1000000000000
// long 범위로 놀자
import java.util.*;

class Solution {
    public long solution(int n, int[] works) {
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
        long answer = 0;

        // 모든 작업량을 우선순위 큐에 추가
        for (int work : works) {
            pq.add(work);
        }

        // n 시간 동안 작업량을 1씩 감소
        while (n > 0 && !pq.isEmpty()) {
            int current = pq.poll(); // 최대 작업량 추출
            current -= 1; // 작업량 1 감소
            if (current > 0) { // 0보다 크면 다시 추가
                pq.add(current);
            }
            n--; // 남은 작업 시간 감소
        }

        // 남은 작업량의 제곱의 합 계산
        while (!pq.isEmpty()) {
            int num = pq.poll();
            answer += (long) num * num;
        }

        return answer;
    }

}