코딩테스트/C++
[프로그래머스 Level 1] 실패율(C++)
최-코드
2024. 4. 21. 16:18
https://school.programmers.co.kr/learn/courses/30/lessons/42889#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
배열을 선언한 다음 각 단계에 존재하는 사람의 수를 구해준 다음, 1부터 시작해서 N까지의 스테이지의 실패율을 스테이지 번호와 함께 vector에 넣어 준 다음 정렬 후 answer vector에 저장해주면 된다. 이 때 각 스테이지에 도달한 사람의 수는 전 단계의 전체 사람 수에서 전 단계의 존재하는 사람의 수를 빼주면 된다. 이 때 주의할 점으로는 실패율을 계산할 때 분모가 0이 되는 점이다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
#define endl '\n'
#define ll long long
#define pii pair<int, int>
#define cout std::cout
#define maxNum 2100000000
using namespace std;
bool compare(pair<float,int> a, pair<float, int> b) {
if (a.first == b.first) {
return a.second < b.second;
}
else {
return a.first > b.first;
}
}
int arr[501];
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
vector<pair<float, int>> orders;
for (int i = 0; i < stages.size(); i++) {
arr[stages[i]]++;
}
int nums = stages.size();
for (int i = 1; i <= N; i++) {
if(arr[i]==0){
orders.emplace_back(0,i);
continue;
}
orders.emplace_back(arr[i] / (float)nums, i);
nums -= arr[i];
}
sort(orders.begin(), orders.end(), compare);
for (int i = 0; i < orders.size(); i++) {
answer.push_back(orders[i].second);
}
return answer;
}