본문 바로가기

Algorithm/Implementation

(C++) - 프로그래머스(연습문제) : 야근 지수 답

반응형

programmers.co.kr/learn/courses/30/lessons/12927?language=cpp

 

코딩테스트 연습 - 야근 지수

회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다. Demi는 N시간 동안 야근 피로도

programmers.co.kr

priority queue를 이용해 풀었습니다.

풀이방법

 1. 작업시간들을 모두 max heap priority queue에 넣어줍니다.

 2. n만큼 pq.top()은 항상 그 다음 최대의 작업시간이므로 해당 값이 양수일때 1씩 빼준 후 pop하고 1줄어든 값을 다시 push 해줍니다.

 3. pq에 있는 원소를 모두 빼주면서 야근 지수를 계산해줍니다.

Code

#include <bits/stdc++.h>
using namespace std;

long long solution(int n, vector<int> works) {
    long long answer = 0;
    priority_queue<int,vector<int>> pq;
    for(int i = 0; i < works.size(); i++){
        pq.push(works[i]);
    }
    for(int i = 0; i < n; i++){
        if(pq.top() > 0){
            long long t = pq.top() - 1;
            pq.pop();
            pq.push(t);
        }
    }
    while(!pq.empty()){
        long long t = pq.top();
        pq.pop();
        answer += pow(t,2);
    }
    return answer;
}