우선순위큐라는 자료구조를 알고있다면 상당히 쉽게 풀수있는 문제이다. 본인은 이를 몰라서 고생을 하다가 이번기회에 공부하게되었다.
간단히 설명하면 우선순위큐는 우선순위가 높은 데이터가 먼저나가는 자료구조로 힙을 기반으로 구현되어져 있다.
#include <queue>
using namespace std;
int main()
{
priority_queue<int> pq;
// 내림차순에 따라 정렬하는 우선순위 큐 선언, top에 가장 큰값이 놓이게 됨
priority_queue<int, vector<int>, greater<int>> pq;
//컨테이너에 따른 비교함수를 사용하여 정렬
}
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(int n, int k, vector<int> enemy)
{
int sum = 0;
priority_queue<int, vector<int>, greater<int>> pq;//작으면 top으로 오게됨
for (int i = 0; i < enemy.size(); i++)
{
pq.push(enemy[i]);
if (pq.size() > k)// 무적권보다 개수보다 크게 쌓이게되면
{
sum += pq.top();// 가장 작은값 ++
pq.pop();// 빼준다.
}
if (sum > n) return i;// 종료조건
}
return enemy.size();// 모든라운드 통과
}