본문 바로가기
알고리즘 문제풀이/프로그래머스

[프로그래머스 2019 KAKAO BLIND RECRUITMENT] 실패율

by m2162003 2021. 2. 22.

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

레벨 2 문제

정렬을 사용하는 문제였다.

 

1. 각 문제마다 푼 사람의 수를 저장한다.

2. 실패율을 구하기 위해

현재 스테이지 사람/len-(이전 스테이지까지의 누적)을 저장한다.

형변환 주의하자

++ 문제 조건에서

  • 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다. 

라고 했으므로 len = 0인 경우 실패율은 무조건 0이다.

3. 소팅함수를 구현한다.

4. answer에 인덱스 값을 넣어준다.

 

#include <string>
#include <vector>
#include <algorithm>
#include <stdio.h>

using namespace std;

struct s{
    double failp;
    int idx;
};

bool cmp(const s &t1, const s &t2){
    if(t1.failp == t2. failp){
        return t1.idx < t2.idx;
    }
    return t1.failp > t2.failp;
}

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    
    vector<int> solve(N+1);
    vector<s> fail;
    
    int len = stages.size();
    for(int i=0; i<len; i++){
        solve[stages[i]]++;
    }
    
    for(int i=1; i<=N; i++){
        len -= solve[i-1];
        
        if(len > 0){
            double p = (double)solve[i]/len;
            fail.push_back({p,i});
        }else {
            fail.push_back({0,i});
        }
        
    }
    
    sort(fail.begin(), fail.end(), cmp);
 
    for(int i=0; i<N; i++){
        answer.push_back(fail[i].idx);
    }
   
    return answer;
}

댓글