[C++로 풀이] 실패율⭐
카테고리: Programmers
태그: Coding Test Algorithm
📌 실패율
난이도 ⭐
🚀 문제
🚀 내 풀이 ⭕
#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
: 스테이지별로(=인덱스별로) 플레이어들이 성공한 횟수.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기