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;
}
우선순위큐를 이용한 풀이 -> 통과 ::
우선순위큐 이용하기.