코딩테스트/프로그래머스
[레벨1] 실패율
marmelo12
2021. 11. 12. 18:23
반응형
#include <string.h>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
#define Epsilon 0.00000000000000000001
bool Compare(pair<int, double>& lhs, pair<int, double>& rhs)
{
if (abs(lhs.second - rhs.second) > Epsilon)
return lhs.second > rhs.second;
else
return lhs.first < rhs.first;
}
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
// 실패율 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
int len = stages.size();
int* arr = new int[len];
memset(arr, 0, sizeof(int) * len);
vector<pair<int, double>> result;
result.reserve(N);
for (int i = 0; i < len; ++i)
arr[stages[i]] += 1;
// 사람 수 == len
int count = 0;
for (int i = 1; i <= N; ++i)
{
if (arr[i] != 0) //
{
if(len - count == 0)
{
result.push_back(make_pair(i,0.0));
continue;
}
double fail = static_cast<double>(arr[i]) / (len - count);
count += arr[i]; // 사람 수 기록.
result.push_back(make_pair(i, fail));
}
else
result.push_back(make_pair(i, 0.0));
}
sort(result.begin(), result.end(), Compare);
for (int i = 0; i < N; ++i)
answer.push_back(result[i].first);
delete[] arr;
return answer;
}
반응형