본문 바로가기

CS/알고리즘

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

정답 코드

https://rolypolytoy.tistory.com/48

 

  • cnt[stages[i]]++; 각 스테이지 실패한 사람들 수를 이렇게 입력할 수가 있네
  • stage에서 실패한 사람이 없다/있다로 if-else문 간략하게 작성할 수 있고.
  • mo -= cnt[i]; // 해당 단계에서 실패했다는 것은 다음단계도 못했다는 의미이기 때문에 전체 수에서 빼준다. 여기도 중요하다!

if-else를 깔끔하게 나누지 못해 틀린 문제.

카카오 2019 블라인드 채용 기출이지만 기출 중에선 비교적 쉬운 편으로 보이니

잘 복습해두자


내 코드 (오답)

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<pair<float, int>> failR; //실패율과 각 스테이지의 번호
    int k=1; //각 스테이지 변수
    int bunmo=0; //스테이지에 도달한 플레이어 수
    int bunja=0; //스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
    long fail;

    
    for (int i=0; i<stages.size(); i++)
    {
        if (stages[i]>=k) //스테이지에 도달한 플레이어들
        {
            bunmo++; //실패율의 분모
           
        }
        
        else if (bunmo==0) //스테이지에 도달한 유저가 없는 경우 
        {
            fail=0;
            k++;
            continue;
        }
        
        if (stages[i]==k){ //스테이지에 도달했으나 스테이지를 깨지 못함
            bunja++; //실패율의 분자
        }
        
        else{
            fail= bunja/bunmo;
        }
        failR.push_back(make_pair(fail,stages[i]));
        k++;
    }   
    
    sort(failR.rbegin(),failR.rend()); //내림차순 정렬
    
    for (int i=0; i<N; i++)
    {
        answer.push_back(failR[i].second);
    }
 
    return answer;
}