본문 바로가기

프로그래머스/힙

야근지수

728x90

programmers.co.kr/learn/courses/30/lessons/12927

 

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

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

programmers.co.kr

#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

bool cmp(long long a, long long b){
    return a>b;
}


long long solution(int n, vector<int> works) {
    
    long long answer = 0;
    vector<long long>v(n+1);
    long long total =0;
    priority_queue<int>pq; // 최대값을 항상 고려해야함: 우선순위 큐 쓰는 문제!!!
    for(int i=0; i<works.size(); i++){
       total += (works[i]*works[i]);
    }
    
    v[0]=total;
    int idx =0;
    
    for(int i=0; i<works.size(); i++){
        pq.push(works[i]);
    }
    
    //sort(works.begin(),works.end(),cmp);
    for(int i=1; i<=n; i++){
        int topnum = pq.top();
        topnum--;
        long long minus = topnum*2+1;
        if(v[i-1]<=minus){return 0;}
        else{v[i]= v[i-1]-minus;}
        pq.pop();
        pq.push(topnum);
       // --pq.top();
        
  
  }
    answer = v[n];
    return answer;
}

- priority queue 를 통해 매번 최대값을 1씩 빼주면 된다. 

- priority queue 대신 vector에 넣어서 sort 하면 시간 초과 뜸

'프로그래머스 > ' 카테고리의 다른 글

디스크 컨트롤러  (0) 2021.02.14
이중우선순위큐  (0) 2021.02.10
더 맵게  (0) 2021.01.11