pkuImoogis / study-codingTest

0 stars 0 forks source link

야근 지수 #387

Open geonnho0 opened 7 months ago

geonnho0 commented 7 months ago

문제 링크

geonnho0 commented 7 months ago

매번 남은 작업량이 제일 많은 일을 1시간씩 일해요. 퇴근 시간에 도달하면, 모든 일에 대해서 남은 작업량의 제곱값을 합하면 돼요.

따라서 우선순위 큐를 사용해 작업량이 많은 일을 가져와서 1시간씩 빼주고, 이후 정답을 구할 때 큐에서 얻은 원소가 0보다 작거나 같으면 즉시 정답을 반환해요.

코드

class Solution {
    public long solution(int n, int[] works) {
        PriorityQueue<Integer> queue = new PriorityQueue(Collections.reverseOrder());
        for (int work : works)
            queue.offer(work);
        while (n-- > 0) {
            int work = queue.poll() - 1;
            queue.offer(work);
        }
        long answer = 0;
        while (!queue.isEmpty()) {
            int work = queue.poll();
            if (work <= 0)
                break;
            answer += (int) Math.pow(work, 2);
        }
        return answer;
    }
}