개발/뇌를 말랑하게하는 코테 연습

[프로그래머스 Lv1] 실패율

njsung 2022. 6. 7. 15:50
반응형

[구현 환경]

  • C++

[문제 설명]

  • 총 스테이지 N, 유저들의 현재 스테이지 vector<int> stages가 주어짐
  • 모든 스테이지를 클리어한 경우 유저의 stage는 N+1로 표시됨
  • 각 스테이지 별, 유저들의 실패율을 계산해서 정렬해 return할 것
    • 조건 1 : 실패율이 높은 순서로 정렬
    • 조건 2 : 실패율이 같을 경우 스테이지가 빠른 순서로 정렬

[함수 원형]

vector<int> solution(int N, vector<int> stages)
{
	std::vector<int> answer;
    
	return answer;
}

[풀이]

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool compare2(pair<int, double>a, pair<int, double>b) {
    if (a.second != b.second) return a.second > b.second;
    return a.first < b.first;
}

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<int> nStageClearUser(N+1,0);
    vector<int> nStageCurrentUser(N + 1, 0);
    vector<pair<int, double>> rank;

    for (auto& stage : stages)
    {        
        for (int i = 0; i < stage; ++i) nStageCurrentUser.at(i)++;
        nStageClearUser.at(stage - 1)++;
    }
    
    for (int i=0;i<nStageClearUser.size()-1;++i)
    {
        if(nStageCurrentUser.at(i)!=0)
            rank.emplace_back(std::make_pair(i + 1, (nStageClearUser.at(i) / (double)nStageCurrentUser.at(i))));
        else
            rank.emplace_back(std::make_pair(i + 1, 0.0));
    }

    sort(rank.begin(), rank.end(), compare2);

    for (auto r : rank) {
        answer.emplace_back(r.first);
    }

    return answer;
}
반응형