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

내풀이

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

long long solution(int n, vector<int> works) {
    long long answer = 0;
    
    int cnt(0);
    while(1)
    {
        if(cnt == n)    break;
        sort(works.begin(), works.end(), [](int a, int b){
            return a>b;
        });
        if(works[0]>0)       works[0]--;
     
        cnt++;
    }
    
    
    for(int i=0; i<works.size(); i++)
    {
        works[i]=works[i]*works[i];
        
        if(i==works.size()-1)
        {
            long long iResult(0);
            for(int j=0; j<=i; j++)
            {
                iResult+=works[j];
            }
            answer = iResult;
        }   
    }
    
    return answer;
}

답틀렸음. 테스트케이스는 다맞는데 효율성에서 탈락

#include <string>
#include <vector>
#include <queue>

using namespace std;

long long solution(int n, vector<int> works) {
    long long answer = 0;

    priority_queue<int, vector<int>, less<int>> pq;//내림차순입니다.

    for (int i = 0; i < works.size(); i++)
    {
        pq.push(works[i]);
    }

    for (int i = 0; i < n; i++)
    {
        int iTemp = pq.top();
        if (iTemp > 0)
        {
            iTemp--;
            pq.pop();
            pq.push(iTemp);
        }
    }

    while (!pq.empty())
    {
        int iTemp = pq.top() * pq.top();
        answer += iTemp;
        pq.pop();
    }

    return answer;
}

우선순위큐를 이용한 풀이 -> 통과 ::
우선순위큐 이용하기.

profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글