[실패율]
#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형의 함수를 만들어 만약 실패율이 같을 경우는 스테이지가 낮은쪽이 먼저 정렬되도록 만들었다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자열 내 마음대로 정렬하기 (0) | 2021.08.10 |
---|---|
[프로그래머스] [1차][비밀지도] (0) | 2021.06.29 |
[프로그래머스] [1차][다트게임] (0) | 2021.06.29 |
[프로그래머스] 예산 (0) | 2021.06.29 |
[프로그래머스] 2016년 (0) | 2021.06.29 |