개발자 김수진

[프로그래머스] 실패율(C++) 본문

알고리즘/프로그래머스

[프로그래머스] 실패율(C++)

김수진장 2021. 8. 22. 18:10

[문제]

 

https://programmers.co.kr/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

[풀이]

 

스테이지의 실패율이 같을 경우, 스테이지 번호를 기준으로 오름차순 해야하므로  cmp 함수에서 second 값으로 비교해준다.

 

 

[코드]

#include <string>
#include <vector>
#include <algorithm>
#define MAX 501

using namespace std;

int people =0;
double score[MAX]={0,};
vector <pair<double,int>> v;

bool cmp(pair<double,int> a, pair<double,int> b){
    if(a.first > b.first)
        return true;
    else if(a.first == b.first) {
        if(a.second< b.second) {
            return true;
        } else
            return false;
    } 
    else
        return false;
}


vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    
    for(int i=1;i<=N;i++)   score[i] =0;
    people = stages.size();
    sort(stages.begin(), stages.end());
    int idx =0;
    int tmp_people = people;
    for(int i=0;i<people;i++){
        if(stages[i] > N)   continue;
        idx=i+1;
        int goal = 1;
        while(idx < people && stages[idx] == stages[i]){
            idx++;
            goal++;
        }
        double d =  (double)goal/tmp_people;
        score[stages[i]] =d;
        tmp_people -= goal;
        i = idx-1;
    }
    for(int i=1;i<=N;i++) 
        v.push_back({score[i],i});
    
    sort(v.begin(), v.end(),cmp);
    for(int i=0;i<N;i++)   answer.push_back(v[i].second);
    return answer;
}