실패율

코드
#include <string>
#include <vector> // #include<utility> // pair의 헤더파일
//Pair 클래스는 사용자가 지정한 2개의 타입의 데이터를 저장하는데 사용합니다. 서로 연관된 2개의 데이터를 한 쌍으로 묶어서 다룰 때 사용하면 편리합니다.
#include <unordered_map> // 해시
#include <algorithm> // sort()
using namespace std;
bool compare(pair<double, int> a, pair<double, int> b){
if(a.first==b.first){ // 실패율이 같은 상황
return a.second<b.second; // 작은 번호의 스테이지가 먼저오도록 -> 오름차순 정렬 <
}else{
return a.first>b.first; // 실패율 기준 내림차순 정렬 >
}
}
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
vector<pair<double, int>> fall; // double : 실패율, int : 해당 스테이지
unordered_map<int, double> fallmap; // int : 스테이지 단계, double : 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
for(int i=0;i<stages.size();i++){
fallmap[stages[i]]++; // 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 카운트
}
double fallednum=0;
int stagesmember=stages.size(); // 총 사용자 인원
for(int i=1;i<=N;i++){
if(fallmap[i]==0){ // 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.
fall.push_back({0,i});
continue;
}
fall.push_back({fallmap[i]/(stagesmember-fallednum),i}); // stagesmember-fallednum : 총 인원에서 이미 전 스테이지에서 실패한 인원은 제외
fallednum=fallednum+fallmap[i];
}
sort(fall.begin(), fall.end(), compare);
for(int i=0;i<fall.size();i++){
answer.push_back(fall[i].second);
}
return answer;
}
'C++ > programmers 코딩테스트(level 1) C++' 카테고리의 다른 글
[C/C++] programmers Level 1 숫자 짝꿍 (0) | 2023.10.26 |
---|---|
[C/C++] programmers Level 1 [1차] 다트 게임 (0) | 2023.10.25 |
[C/C++] programmers Level 1 로또의 최고 순위와 최저 순위 (0) | 2023.10.18 |
[C/C++] programmers Level 1 덧칠하기 (0) | 2023.10.18 |
[C/C++] programmers Level 1 옹알이 (1,2) (0) | 2023.10.16 |