본문 바로가기

Algorithm/카카오기출

[프로그래머스] 실패율

문제

 

풀이

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

using namespace std;

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<int> stay(N,0);
    vector<float> fRate;
    int person = stages.size();
 
    for(int i=0; i<stages.size(); i++){
        if(stages[i] <= N)
            stay[stages[i]-1] ++;
    }

    for(int i=0; i<person; i++){
        if(person == 0){
            fRate.push_back(0.0);
            continue;
        }
        fRate.push_back((float)stay[i]/person);
        person -= stay[i];
    }


    for(int i=0; i<fRate.size(); i++){
        int max_index = max_element(fRate.begin(), fRate.end()) - fRate.begin();
        answer.push_back(max_index+1) ;
        fRate[max_index] = -1;
    }

    return answer;
}

 

해결 과정

1. 클리어하지 못한 사용자 수를 stay벡터에 저장한다.

2. stay벡터와 person(총 유저 수)을 이용해 실패율을 구하고 fRate벡터에 저장한다. 

   person은 [총 유저 수 - 스테이지 1에 머무른 유저 수 = 스테이지 2에 도전한 유저 수]의 방법으로 구해주었다. 

   person의 값이 0일 경우 실패율을 구하는 공식에 대입할 대 오류가 발생할 수 있기 때문에 fRate에 직접 0의 값을 넣     어주었다.

3. fRate의 value(실패율)가 가장 높은 인덱스(스테이지) 값을 answer벡터에 넣는다. 

 

 


 

 

 

다른 사람 풀이

#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(const pair<double,int>&a, const pair<double,int>&b){
    if(a.first==b.first) return a.second<b.second;
    return a.first>b.first;

}
vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<pair<double,int>> fail;
    for(int i=1;i<=N;i++){
        double a=0,b=0;
        for(int j=0;j<stages.size();j++){
            if(stages[j]==i) a+=1;
            if(stages[j]>=i) b+=1;
        }
        if(b!=0)
            fail.push_back(make_pair(a/b,i));
        else if(b==0)
            fail.push_back(make_pair(0,i));
    }
    sort(fail.begin(),fail.end(),cmp);
    auto it=fail.begin();
    for(it=fail.begin();it!=fail.end();it++)
        answer.push_back(it->second);
    return answer;
}

 

 

 


 

 

 

 

https://notepad96.tistory.com/entry/C-Vector-%EC%B5%9C%EB%8C%80%EA%B0%92-%EC%B5%9C%EC%86%8C%EA%B0%92-%EC%9D%B8%EB%8D%B1%EC%8A%A4-%EA%B5%AC%ED%95%98%EA%B8%B0

 

C++ Vector 최대값, 최소값, 인덱스 구하기

1. 최대값, 최소값 vector 컨테이너에서 최대값, 최소값을 구할 경우 for문을 작성할 수도 있지만 이는 복잡하다. 그래서 algorithm 라이브러리의 있는 max_element를 사용한다면 한줄로도 간단하게 최대

notepad96.tistory.com