오답노트

프로그래머스 - 1단계 - 실패율 본문

C,C++/코딩테스트

프로그래머스 - 1단계 - 실패율

권멋져 2022. 5. 29. 19:34
https://programmers.co.kr/learn/courses/30/lessons/42889?language=cpp 
 

코딩테스트 연습 - 실패율

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

programmers.co.kr

- 문제파악

총 스테이지 수 N과 플레이어들이 현재 도전중인 스테이지를 넣은 배열이 주어진다. 실패율을 구해야하는 실패율은

현재 도전중인 플레이어의 수 / 클리어한 플레이어의 수이다. 이 때 실패율이 높은 순서대로 정렬한 배열을 출력하라. 실패율이 같을 경우 스테이지 순서가 빠른 순으로 출력하라.

 

- 정답

멍청하게도 double을 계산할 때 형변환을 명시적으로 안해줘서 혼란스러웠다.

#include "bits/stdc++.h"
using namespace std;

int arr_clear[502];
int arr_not_clear[502];

bool cmp(pair<double,int> a,pair<double,int> b)
{
    if(a.first < b.first)
        return false;
    else if (a.first > b.first)
        return true;
    else
    {
        if(a.second < b.second)
            return true;
        else if (a.second > b.second)
            return false;
    }
}

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<pair<double,int>> vec;

    for(auto a : stages)
    {
        for(int i = 1 ; i <= a ; i++)
            arr_clear[i]++;
        
        arr_not_clear[a]++;
    }
    
    for(int i = 1 ; i <= N ; i++)
    {
        double tmp = 0;
        
        if(arr_clear[i])        
            tmp = (double)arr_not_clear[i] / (double)arr_clear[i];

        vec.push_back({tmp,i});
        
    }
    
    sort(vec.begin(),vec.end(),cmp);
    
    for(auto a : vec)
        answer.push_back(a.second);
    
    
    return answer;
}