priority queue
로 푸는 문제. 근데 이걸로 안풀고 그냥 제일 큰 값 찾아서 하나씩 줄이면 될 것 같긴하다.
works
를 pq
에 넣고 n
이 0
이 될 때까지 제일 큰 값 (pq.top()
)을 하나씩 줄인다.top()
값은 pop하고 갱신된 값은 push한다.pq
가 빌 때까지 answer
에 pq.top()^2
값을 더해준다.#include <string>
#include <vector>
#include <queue>
using namespace std;
long long solution(int n, vector<int> works) {
long long answer = 0;
priority_queue<int> pq;
for(int i=0;i<works.size();i++)
{
pq.push(works[i]);
}
while(n>0)
{
int tmp = pq.top();
pq.pop();
if(tmp==0) return 0;
tmp--;
pq.push(tmp);
n--;
}
while(!pq.empty())
{
answer+=pq.top()*pq.top();
pq.pop();
}
return answer;
}