실패율 : 문제 링크
실패율은 다음과 같이 정의한다.
- 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성
제한 사항
- 스테이지의 개수 N은 1 이상 500 이하의 자연수이다.
- stages의 길이는 1 이상 200,000 이하이다.
- stages에는 1 이상 N + 1 이하의 자연수가 담겨있다.
- 각 자연수는 사용자가 현재 도전 중인 스테이지의 번호를 나타낸다.
- 단, N + 1 은 마지막 스테이지(N 번째 스테이지) 까지 클리어 한 사용자를 나타낸다.
- 만약 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 하면 된다.
- 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.
algorithm 헤더의 sort() 함수 사용법
void sort(T start, T end, Compare comp); //comp 인자가 공란이면 오름차순 정렬
- sort(v.begin(), v.end(), compare); // 사용자 정의 함수 사용
- sort(v.rbegin(), v.rend()); // 내림차순
- sort(v.begin(), v.end(), greater<자료형>()); // 내림차순
- sort(v.begin(), v.end(), less<자료형>()); // 오름차순
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(int N, vector<int> stages) {
vector<int> count(N + 2);
vector<float> failure(N + 1);
vector<int> answer;
for (int i = 0; i < stages.size(); ++i) {
count[stages[i]]++;
}
int total = stages.size();
for (int i = 1; i <= N; ++i) {
if (total != 0) {
failure[i] = (float)count[i] / total;
total -= count[i];
}
else failure[i] = 0;
}
vector<pair<int, float>> pairs;
for (int i = 1; i <= N; ++i) {
pairs.push_back({i, failure[i]});
}
sort(pairs.begin(), pairs.end(), [](pair<int, float> a, pair<int, float> b) {
if(a.second == b.second) return a.first < b.first;
else return a.second > b.second;
});
for (int i = 0; i < pairs.size(); ++i) {
answer.push_back(pairs[i].first);
}
return answer;
}