실패율

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
int i, j;
vector<int> stages_clear(N + 2, 0);//각 스테이지별 클리어한 사람들의 수
int current_stage_num;
double current_stage_fail;
vector<pair<int, double>> failure_data;
//실패율 = (스테이지도착 & 클리어 못한 플레이어 수) / 스테이지 도착 플레이어 수
//게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages?
//-> 21262433이면 0번 플레이어는 2번 스테이지에 멈춰있고, 1번 플레이어는 1번 스테이지에 멈춰있고, 3번 플레이어는 2번 스테이지에 멈춰있고,....
//스테이지 클리어한 사람 수 계산
for(i = 0; i < stages.size(); i++){
for(j = 1; j <= stages[i]; j++){
stages_clear[j]++;
}
}
//클리어 스테이지 출력
cout << "스테이지 클리어한 사람 수 : ";
for(int clear : stages_clear){
cout << clear << " ";
}
cout << "\n";
//실패율 계산
for(i = 1; i <= N; i++){
if(stages_clear[i] > 0){
current_stage_num = i;
current_stage_fail = (stages_clear[i] - stages_clear[i+1]) / (double)stages_clear[i];
failure_data.push_back({current_stage_num, current_stage_fail});
}
else{
//이 부분의 stages_clear[i] == 0인 경우를 추가를 안 해서 오류가 발생함.
//예를 들어 stages_clear의 결과가 [2 1 0 0]인 경우
//current_stage_num은 0-0해서 0, current_stage_fail는 0-0/0해서 오류가 발생할 수 있음
failure_data.push_back({i, 0});
}
}
//저장된 실패율 출력
for(i = 0; i < failure_data.size(); i++){
cout << failure_data[i].first << "번 스테이지 실패율 : " << failure_data[i].second << "\n";
}
cout <<"\n";
//실패율 정렬, 실패율이 높은 순으로 정렬하는데 같으면 작은번호가 앞으로 오도록 정렬
sort(failure_data.begin(), failure_data.end(), [](pair<int, double> a, pair<int, double> b){
if(a.second != b.second){
return a.second > b.second;
}
else{
return a.first < b.first;
}
});
//정렬된 실패율 저장
for(i = 0; i < failure_data.size(); i++){
answer.push_back(failure_data[i].first);
}
return answer;
}