https://programmers.co.kr/learn/courses/30/lessons/42889
double cmp(pair<int, double> c1, pair<int, double> c2)
{
if (c1.second == c2.second) return c1.first < c2.first;
return c1.second > c2.second;
}
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
vector<pair<int, double>> sumFail(N + 1);
for (int i = 0; i < stages.size(); i++) {
sumFail[stages[i] - 1].first++;
}
int cnt = stages.size();
for (int i = 0; i < sumFail.size(); i++) {
if (cnt != 0) {
sumFail[i].second = double(sumFail[i].first) / cnt;
cnt -= sumFail[i].first;
}
sumFail[i].first = i+1; // first = 스테이지, second = 실패율
}
sumFail.pop_back(); // 마지막 필요없다.
std::sort(sumFail.begin(), sumFail.end(), cmp);
for (int i = 0; i < sumFail.size(); i++) {
answer.push_back(sumFail[i].first);
}
return answer;
}