[실패율]

#include <string>
#include <vector>
#include <algorithm>
#include <utility>

using namespace std;

bool cmp(const pair<float,int>& a , const pair<float, int>& b){
    if(a.first == b.first)
        return a.second < b.second;
    return a.first > b.first;
}

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    int number = stages.size();
    pair<float, int> p;
    vector<pair<float,int>> vec;
    int index;
    float failure;
    int cnt;
    for (int i = 0; i < N; i++) {
        index = i + 1;
        cnt = count(stages.begin(), stages.end(), i + 1);
        if(cnt == 0)
            failure = 0;
        else{
             failure = cnt / (float)number;
            number -= cnt;
        }
        vec.push_back(make_pair(failure,index));
    }

    sort(vec.begin(), vec.end(), cmp);

    for (int i = 0; i < vec.size(); i++) {
         answer.push_back(vec[i].second);
    }

    return answer;
}

해설

Pair 로 실패율과 index번호를 결합한 vector를 생성하였다.

Algorithm 에 있는 Count 를 사용하여 벡터안에 같은 숫자가 몇개있는지 1stage 부터 판별하였다.

또한 count가 0일때는 stage에 도달한 사람이 없다는 것 이므로 그 때는 실패율을 0으로 예외처리해주었다.

Algorithm 에 있는 Sort 를 사용하고 cmp라는 bool형의 함수를 만들어 만약 실패율이 같을 경우는 스테이지가 낮은쪽이 먼저 정렬되도록 만들었다.

+ Recent posts