코딩테스트/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;
}