본문 바로가기
Algorithm/programmers

2019 Kakao blind 42889 - 실패율(구현, 숫자 연산) c++ 풀이

by Ellery 2021. 9. 6.

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

- 각 스테이지마다 남은 도전자와 실패율을 계산한 뒤에 실패율이 높은 스테이지부터 내림차순으로 answer에 담아주면 된다.

- 스테이지 번호와 실패율을 pair로 담아 소팅해줘도 되는데 idx 처리하는게 귀찮아서 그냥 실패율만 계산해서 최대값을 구한뒤 -INF를 넣어서 제외시키는 방식으로 풀었다. 이래도 제한범위가 좁아서 충분히 통과한다.

#include <string>
#include <vector>
#include <algorithm>
#define INF 0x3f3f3f3f
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 cnt = 0;
        for(int j = 0; j<stages.size(); ++j) {
            if(stages[j] == i) cnt++;
        }
        if(cnt == 0) rate.push_back(0);
        else rate.push_back(cnt/user);
        user -= cnt;
    }

    for(int i = 0; i<N; ++i) {
        auto it = max_element(rate.begin(), rate.end());
        answer.push_back(it - rate.begin() + 1);
        *it = -INF;
    }
    return answer;
}