[C++로 풀이] 실패율⭐

Date:     Updated:

카테고리:

태그:

📌 실패율

난이도 ⭐

🚀 문제

image

image


🚀 내 풀이 ⭕

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

using namespace std;

bool compare(pair<int, float> a, pair<int, float> b)
{
    if (a.second == b.second)  // 실패율이 같다면
        return a.first < b.first;  // 이름(int) 기준 오름차순
    else
        return a.second > b.second; // 실패율(float) 기준 내림차순
}

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

    vector<int> all(N);
    vector<int> success(N);
    vector<pair<int, float>> temp(N);

    // all, success 업데이트
    for (int i = 0; i < stages.size(); i++)
    {
        for (int j = 0; j < stages[i] && j < N; j++)
            all[j]++;
        for (int j = 0; j < stages[i] - 1; j++)
            success[j]++;
    }

    // 스테이지와 실패율 매칭 pair
    for (int i = 0; i < N; i++)
    {
        // 아무도 도달한적이 없는 스테이지라면, 즉 all[i] = 0 이라면 실패율은 0 으로.
        float fail = (all[i] == 0? 0 : (all[i] - success[i]) / (float)all[i]); 
        temp[i] = make_pair(i + 1, fail);
    }

    sort(temp.begin(), temp.end(), compare); // 실패율 기준 정렬

    for (int i = 0; i < N; i++)
        answer[i] = temp[i].first;

    return answer;
}
  • 스테이지를 정렬할 때 실패율을 기준으로 정렬해야하기 때문에 비교 함수에 실패율도 알려야하므로 불가피하게 pair을 사용할 수 밖에 없었음.
  • all : 스테이지별로(=인덱스별로) 성공이든 실패든 플레이어들에 의해 도달된 횟수.
    • 스테이지를 다 깨고 넘어가버린 사람은 N을 넘는다. (예제1에서 6 같은..) 이를 고려해야함 안그럼 all 인덱스 초과 에러
  • success : 스테이지별로(=인덱스별로) 플레이어들이 성공한 횟수.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Programmers 카테고리 내 다른 글 보러가기

댓글 남기기