[프로그래머스 Lv1] 실패율

수민이슈·2023년 4월 17일
0

[C++] 코딩테스트

목록 보기
17/116
post-thumbnail

🖊️ 문제

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

🖊️ 풀이

간단한 구현형..인것같다
이중포문 돌면서
스테이지 지나간 애들(total), 도전중인 애들 (fail)을 카운팅하고
double형으로 나눠주고 예외처리 해주고
pair 형태의 벡터에다가 넣어주고 정렬해주면 끝

정렬은 당연히 비교함수 만들어서 넣어줬다
우선순위는
실패율이 큰 것부터
실패율이 같으면 스테이지가 작은 것부터.

그러면 끝인데
왜 오래걸렸냐면
ㅋㅋㅋ
double로 형변환 안해줬따

🖊️ 코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

bool compare(pair<int, double> A, pair<int, double> B) {
    if (A.second == B.second) {
        return A.first < B.first;
    }
    else {
        return A.second > B.second;
    }
}

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<pair<int, double>> scores;
    
    for (int i = 1 ; i < N+1 ; i++) {
        int total = 0;
        int fail = 0;
        double rate = 0.0f;
        for (int j = 0 ; j < stages.size() ; j++) {
            if (stages[j] > i) {
                total += 1;
            }
            else if (stages[j] == i) {
                total += 1;
                fail += 1;
            }
        }
        if (total == 0) rate = 0;
        else rate = (double)fail / total;
        
        scores.emplace_back(make_pair(i, rate));
    }
  
    sort(scores.begin(), scores.end(), compare);
    
    for (auto& s : scores) {
        answer.emplace_back(s.first);
    }
    
    return answer;
}

0개의 댓글