개발/뇌를 말랑하게하는 코테 연습
[프로그래머스 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;
}
반응형