https://school.programmers.co.kr/learn/courses/30/lessons/135808
score을 내림차순으로 정렬한 뒤 m씩 끊어가면서 끊은 묶음에서 가장 뒤에있는 숫자 ( 가장 작은 숫자 ) 에 m을 곱한값을 더해간다.
커스텀 cmp함수 대신 greater()을 넣으면 굳이 cmp를 구현하지 않아도 된다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool cmp(int a, int b)
{
return a > b;
}
int solution(int k, int m, vector<int> score) {
int answer = 0;
sort(score.begin(), score.end(),cmp);
for(int i = m - 1; i < score.size(); i+=m)
{
answer += score[i] * m;
}
return answer;
}
#include <vector>
#include <queue>
using namespace std;
priority_queue<int> pq;
int solution(int k, int m, vector<int> score) {
int answer = 0;
for(int i=0; i<score.size(); i++)
pq.push(score[i]);
while(pq.size() >= m) {
for(int i=0; i<m-1; i++) pq.pop();
answer += pq.top() * m;
pq.pop();
}
return answer;
}
priority queue를 사용하였다. (우선순위 큐) 기본적으로 내림차순이다.
m-1갯수를 pop한 다음 top에있는 숫자를 m을 곱해서 answer에 +해준다.
그 후 pop한다.
컨테이너의 차이가 있지만 방식은 비슷하다.