티스토리 뷰

문제 링크

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스��

programmers.co.kr

 

 

풀이

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
반응형
댓글
05-01 10:15
링크