알고리즘/프로그래머스 1단계
프로그래머스 - 실패율 - C++
게임만드는학생
2024. 7. 25. 12:52
https://school.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool compare(pair<int, float> a, pair<int, float> b)
{
if (a.second > b.second)
return true;
else if (a.second < b.second)
return false;
else return a.first < b.first;
}
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
vector<float>arr(N + 1, 0);
for (int i = 0; i < stages.size(); i++)
{
if (stages[i] == N + 1)continue;
arr[stages[i]]++;
}
float n = stages.size();
for (int i = 1; i < arr.size(); i++)
{
int s = arr[i];
arr[i] /= n;
n -= s;
}
vector<pair<int, float>> m;
for (int i = 1; i < arr.size(); i++)
{
m.push_back(make_pair( i, arr[i]));
}
sort(m.begin(), m.end(), compare);
for (auto& v : m)
answer.push_back(v.first);
return answer;
}
사용자 수 N 과 어느 단계에서 막혔는지를 나타내는 stages 가 주어진다.
실패율은 스테이지에 도달했지만 클리어못한 수 / 스테이지에 도달한 수 이다.
단계별로 실패율이 높은 순서대로 answer에 담아서 리턴한다.
먼저 N+1 크기의 arr배열을 만들어서 도달한 스테이지별로 유저 수를 파악한다.
vector<float>arr(N + 1, 0);
for (int i = 0; i < stages.size(); i++)
{
if (stages[i] == N + 1)continue;
arr[stages[i]]++;
}
그 후, 실패율을 계산하여 저장한다.
float n = stages.size();
for (int i = 1; i < arr.size(); i++)
{
int s = arr[i];
arr[i] /= n;
n -= s;
}
그리고 pair를 통해 실패율과 스테이지단계를 묶어서 vector에 저장하고 정렬한다.
vector<pair<int, float>> m;
for (int i = 1; i < arr.size(); i++)
{
m.push_back(make_pair( i, arr[i]));
}
sort(m.begin(), m.end(), compare);
bool compare(pair<int, float> a, pair<int, float> b)
{
if (a.second > b.second)
return true;
else if (a.second < b.second)
return false;
else return a.first < b.first;
}
스테이지 단계만 빼서 answer에 저장한다.
for (auto& v : m)
answer.push_back(v.first);