N

(프로그래머스 c++ KAKAO)실패율 본문

프로그래머스 알고리즘/KAKAO

(프로그래머스 c++ KAKAO)실패율

naeunchan 2020. 4. 30. 20:55
728x90
반응형

우선 실패율을 저장하기 위해 double형 벡터 rate를 선언하였다.

이중 for문을 이용..!

스테이지를 나타내는 i,

stages의 인덱스를 나타내는 j 이다.

 

user는 해당 스테이지를 클리어한 사람의 수를 나타내고,

count는 i번째 스테이지에서 실패한 사람의 수를 나타낸다.

만약 count가 0이면 해당 스테이지에 도달한 유저가 없다는 뜻으로 0을 rate에 넣어주고,

count가 0이 아니면 count / user 의 결과값을 rate에 넣어준다.

그리고 user -= count를 통해 유저의 수를 조정한다.

 

모든 스테이지의 실패율을 구했으면 실패율을 내림차순으로 나열했을 때의 스테이지 번호를

answer에 넣어주어야 한다.

약간(?) 헷갈릴 수 있는 부분이다.

auto itr = max_element(rate.begin(), rate.end();

를 사용하였다.

auto는 자동으로 형을 정해주기 때문에 많이 활용된다..!

max_element()함수는 반복자를 리턴해주므로 itr은 결국 iterator형이 된다.

rate.begin()부터 rate.end()까지 가장 큰 값을 가지는 곳의 반복자를 리턴해준다..!

그렇다면 answer에는 itr - rate.begin() + 1을 하여 스테이지의 번호를 넣어주면 된다..!

+1을 하는 이유는 인덱스는 0부터 시작하기 때문이다..!

그리고 *itr = -111을 하여 해당 스테이지의 실패율을 가장 낮게 만들어준다..!

 

카카오다운 1단계 문제라고 생각한다...!

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

using namespace std;

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<double> rate;
    double user = stages.size();
    
    for(int i = 1; i <= N; i++)
    {
        double count = 0;
        
        for(int j = 0; j < stages.size(); j++)
        {
            if(stages[j] == i)
                count++;
        }
        if(count == 0)
            rate.push_back(0);
        else
            rate.push_back(count / user);
        user -= count;
    }
   
    for(int i = 0; i < N; i++)
    {
        auto itr = max_element(rate.begin(), rate.end());
        answer.push_back(itr - rate.begin() + 1);
        *itr = -111;
    }
    
    return answer;
}
728x90
반응형