bdfgdfg

[레벨1] 실패율 본문

코딩테스트/프로그래머스

[레벨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;
}

 

반응형

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[레벨 2] 스킬트리  (0) 2021.11.28
[레벨 2] 가장 큰 정사각형 찾기  (0) 2021.11.16
[레벨 1] 다트찾기  (0) 2021.11.02
[레벨 1 ] 최소직사각형 만들기  (0) 2021.11.01
[레벨 1] 크레인 인형뽑기  (0) 2021.10.29
Comments