실패율

magicdrill·2024년 12월 11일
0

실패율

#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;
}

0개의 댓글