728x90
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드 구현
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(const pair<int, float>& a, const pair<int, float>& 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<float> challenger(N + 2, 0.0);
vector<float> fail(N + 2, 0.0);
// vector<int> stages = { 2, 1, 2, 6, 2, 4, 3, 3 };
for (int i = 0; i < stages.size(); i++)
{
for (int j = 1; j <= stages[i]; j++)
challenger[j]++;
fail[stages[i]]++;
}
vector<pair<int, float>> failRatio(N);
for (int i = 0; i < N; i++)
{
float failRate = fail[i + 1] / challenger[i + 1];
failRatio[i].first = i + 1;
if (challenger[i + 1] == 0)
failRatio[i].second = 0;
else
failRatio[i].second = failRate;
}
sort(failRatio.begin(), failRatio.end(), compare);
for (int i = 0; i < N; i++)
answer.push_back(failRatio[i].first);
return answer;
}
해결 방법
스테이지에 도달한 플레이어의 수와 도달했지만 클리어하지 못한 플레이어의 수를 각각 벡터에 구한 후, pair<int, float> 을 담고있는 벡터를 이용하여 <스테이지, 실패율> 로 저장한다.
따로 구현한 compare 함수를 이용하여 정렬을 하고 스테이지를 반환하였다.
'개발 > 알고리즘' 카테고리의 다른 글
| [프로그래머스] 배달(C++) (0) | 2025.10.27 |
|---|---|
| [프로그래머스] 땅따먹기(C++) (0) | 2025.09.03 |
| [프로그래머스] 양과 늑대(C++) (0) | 2025.08.21 |
| [프로그래머스] 최적의 행렬 곱셈(C++) (0) | 2025.07.14 |
| [백준] 2473번: 세 용액(C++) (1) | 2025.07.08 |