오늘의 알고리즘

[C++]2019 KAKAO BLIND RECRUITMENT 실패율

하늘하늘 . 2022. 2. 13. 19:51
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
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;
}
 
vector<int> solution(int N, vector<int> stages) 
{
    vector<int> answer;
    vector<pair<double, int>> vecFail;
    double dFail = 0;
    double dFinish = 0;
    int iStageSize = stages.size();
 
    for (int i = 1; i <= N; i++) 
    {
        dFail = 0;
        dFinish = 0;
 
        for (int j = 0; j < iStageSize; j++)
        {
            // 도달시
            if (stages[j] == i) 
                dFail += 1;
 
            // 성공시
            if (stages[j] >= i) 
                dFinish += 1;
        }
 
        // 도달했는지
        if (dFinish != 0)
            vecFail.push_back(make_pair(dFail / dFinish, i));
        // 못했다면 0
        else if (dFinish == 0)
            vecFail.push_back(make_pair(0, i));
    }
 
    // 크기가 큰 순서대로 소트
    sort(vecFail.begin(), vecFail.end(), cmp);
 
    auto iter = vecFail.begin();
 
    for (; iter != vecFail.end(); iter++)
        answer.push_back(iter->second);
 
    return answer;
}

처음에는 스트레스가 심한 상태에서 했는데 제대로 읽지도 않고 풀어서 어떻게 하지... 이랬는데

문제를 다시 잘 읽어보니까 도달한 지 체크만 해보면 돼서 생각보다 쉬웠다.

근데 카카오 특유의 까다로운 문제라... 좀 정신 놓고하면 큰일 난다는 걸 또 한 번 깨달았다..