명예의 전당 (1) : 문제 링크
일차 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
score | 10 | 100 | 20 | 150 | 1 | 100 | 200 |
명예의 전당 | 10 | 100 10 | 100 20 10 | 150 100 20 | 150 100 20 | 150 100 100 | 200 150 100 |
발표 점수 | 10 | 10 | 10 | 20 | 20 | 100 | 100 |
명예의 전당 목록의 점수의 개수 k, 1일부터 마지막 날까지 출연한 가수들의 점수인 score가 주어졌을 때, 매일 발표된 명예의 전당의 최하위 점수를 return하는 solution 함수를 완성
제한 사항
- 3 ≤ k ≤ 100
- 7 ≤ score의 길이 ≤ 1,000
- 0 ≤ score[i] ≤ 2,000
우선순위 큐(priority_queue)
우선순위 큐는 선입선출 순이 아니라 우선순위가 높은 항목이 가장 앞에 오도록 하는 큐이다. 우선순위가 같은 항목들 사이에서도 선입선출 순을 보장하지 않고, 헤더에 함께 정의 되어 있고 정의는 다음과 같다.template <typename _Ty, typename _Container = vector<_Ty>, typename _Pr = less<_Ty>> class priority_queue;
두 번째 파라미터가 바탕 컨테이너이며 vector 외에도 deque을 사용할 수 있다. 세 번째 파라미터는 우선순위의 비교에 사용될 비교 연산을 나타내는 타입이다. less 템플릿 또는 greater 템플릿의 인스턴스가 오거나 클로져와 같은 function이 올 수 있다.
#include <vector>
#include <queue>
using namespace std;
vector<int> solution(int k, vector<int> score) {
vector<int> answer;
priority_queue<int, vector<int>, greater<int>> pq;
for(int i = 0; i < score.size(); ++i) {
if(pq.size() < k) pq.push(score[i]);
else if(score[i] > pq.top()) {
pq.pop();
pq.push(score[i]);
}
answer.push_back(pq.top());
}
return answer;
}