본문 바로가기
개발/Coding Test

[프로그래머스 Lv3 C++] 야근 지수

by Eunduck 2022. 6. 7.

안녕하십니까. Eun🦆입니다.

풀이법 입니다.

 

 

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

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

programmers.co.kr

[효율성 미통과 코드]
#include <string>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;
long long solution(int n, vector<int> works) {
    long long answer = 0;
    for(int idx=0;idx<n;idx++)
    {
        sort(works.begin(),works.end(),greater<int>());
        works[0]--;
    }
    for(int idx=0;idx<works.size();idx++)
    {
        if(works[idx]>0)
            answer += pow(works[idx],2);
    }
    return answer;
}
-> 역시 n번 정렬은 안되나 싶다.

#include <string>
#include <vector>
#include <queue>
#include <math.h>
using namespace std;

long long solution(int n, vector<int> works) {
    long long answer = 0;
    priority_queue<int> work; // top 및 top 원소 삭제 위해 priority_queue 사용
    
    for(int idx=0;idx<works.size();idx++)
        work.push(works[idx]);
    
    for(int idx=0;idx<n;idx++)
    {
        int tmp = work.top(); // 일반 큐는 top를 사용할 수 없다.
        work.pop(); // 우선순위 큐는 top 값을 내보낸다
        tmp--;
        work.push(tmp);
    }
    
    for(int idx=0;idx<works.size();idx++)
    {
        if(work.top()>0)
            answer += pow(work.top(),2);
        work.pop();
    }
    
    return answer;
}

 

네이버 블로그 리뉴얼입니다.

(https://blog.naver.com/unsuk1/222010656056)

댓글