티스토리 뷰
문제 링크
풀이
stage 번호와 실패율의 pair 변수를 vector 컨테이너로 선언하였다.
그리고 오름차순으로 정렬 후 단계 수와 맞는 인원수를 second에 증가시킨 후 전체 totalPerson로 나눈 것을 second에 다시 넣어주었다.
totalPerson은 계속 감소시켜주었다.
마지막에 실패율을 compare 비교함수를 정의하여 정렬하면 first값이 실패율에 따른 stage 번호이다.
더보기
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool compare(pair<int, float> a, pair<int, float> b)
{
if(a.second != b.second) return a.second > b.second;
else return a.first < b.first;
}
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
// <Stage number, Fail count>
vector<pair<int, float>> stageFails;
int totalPerson = stages.size();
// Sort ascending
sort(stages.begin(), stages.end());
// Initialize map(stageFails)
for(int i=0, j=0; i<N; i++)
{
stageFails.push_back(make_pair(i+1, 0));
for(; stages[j]==stageFails[i].first; j++)
{
stageFails[i].second++;
}
if(stageFails[i].second != 0)
{
totalPerson -= stageFails[i].second;
stageFails[i].second /= (totalPerson + stageFails[i].second);
}
// cout<<"정렬 전stage "<<stageFails[i].first<<" = "<<stageFails[i].second<<endl;
}
sort(stageFails.begin(), stageFails.end(), compare);
for(int i=0; i<N; i++)
{
// cout<<"정렬 후stage "<<stageFails[i].first<< = "<<stageFails[i].second<<endl;
answer.push_back(stageFails[i].first);
}
return answer;
}
728x90
반응형
'Programmers Solutions > previous' 카테고리의 다른 글
스킬트리(Summer/Winter Coding(~2018)) (0) | 2020.07.31 |
---|---|
다트 게임(2018 카카오 블라인드 채용) (0) | 2020.07.31 |
비밀지도(2018 카카오 블라인드 채용) (0) | 2020.07.31 |
예산(Summer/Winter Coding(~2018)) (0) | 2020.07.31 |
크레인 인형뽑기 게임(2019 카카오 개발자 겨울 인턴십) (0) | 2020.07.31 |
댓글