본문 바로가기

ALGORITHM/OTHER

[c++] 실패율 (프로그래머스 - 구현)

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

간단한 구현 문제인데 역시 구현문제는 문제를 반드시 꼼꼼하고 꼼꼼하게 읽어야 한다는 것을 다시 깨달은 문제 ㅜ

 

double 계산은 double로 

compare 함수 만들 때 같으면 작은 번호가 먼저 오게 하는 조건을 마지막까지 못보고 있었다 ( <-바보)

 

 

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

bool compare(pair<int, double> a, pair<int, double> b) {
    if (a.second == b.second) {
        return a.first < b.first;
    }
    return a.second > b.second;
}

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<double> challenge(N + 1);
    vector<double> clear(N + 1);
    vector<pair<int, double>> failure;
    
    for (int i=0; i<(int)stages.size(); i++) {
        for (int j=1; j<=(int)(stages[i]); j++) {
            if (j == N + 1) {
                continue;
            }
            challenge[j]++;
            
        } 
        for (int j=1; j<=(int)(stages[i] - 1); j++) {
            clear[j]++;
        } 
    }
    
    for (int i=1; i<=N; i++) {
        if (challenge[i] == 0) {
            failure.push_back(make_pair(i, 0));
            continue;
        }
        
        failure.push_back(make_pair(i, (challenge[i] - clear[i]) / challenge[i]));
    }
    
    sort(failure.begin(), failure.end(), compare);
    
    for (int i=0; i<N; i++) {
        answer.push_back(failure[i].first);
    }
    
    return answer;
}