본문 바로가기

problem solving

[프로그래머스]실패율

실패율 계산해서 store 벡터에 넣어주는데 이때 count 또는 size가 0일 때 예외처리를 해줘야한다.

값을 모두 구한 후 역순으로 정렬하고, answer 벡터에 답을 넣어준다.

이 때 반복문을 순회하면서 같은 확률이 있다면  오름차순으로 정렬해준다.

#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<pair<doubleint>> store;
    int size = stages.size();
    for(int i = 0; i < N; i++) {
        int count = 0;
        for(int j = 0; j < stages.size(); j++) {
            if(stages[j] == i + 1) {
                count++;
            }
        }
        double per;
        if(count == 0 || size == 0) {
            per = 0;
        }
        else {
            per = (double)count / (double)size;
        }
        store.push_back( { per, i + 1 } );
        size -= count;
    }
    
    sort(store.begin(), store.end(), greater<pair<doubleint>>());
    for(int i = 0; i < N; i++) {
        if (i < N - 1 && store[i].first == store[i + 1].first && store[i].second > store[i + 1].second) {
            int cur = i;
            while(cur < N - 1 && store[cur].first == store[cur + 1].first) {
                cur++;
            }
            sort(store.begin() + i, store.begin() + cur + 1);
        }
        answer.push_back(store[i].second);
    }
 
    return answer;
}
cs
메모
bool cmp(const pair<double,int>&a, const pair<double,int>&b){
    if(a.first==b.first) return a.second<b.second;
    return a.first>b.first;
 
}
cs