Krononberg

프로그래머스) 실패율 c++ 본문

개발 로그/알고리즘

프로그래머스) 실패율 c++

k._. 2021. 9. 2. 09:45

배운 점 :

1) pair의 second value로 sorting하고 싶을 때는, sort parameter에 cmp함수(외부에 작성)를 추가.

2) pair를 대입하는 STL : vector.emplace_back( i , value) 주의할점은 i는 iterator성격의 값만 넣어야 함. (링크 참고)

https://www.geeksforgeeks.org/vector-emplace-function-in-c-stl/

3) 0으로 나누면 오류남. 항상 체크할 것.

 

#include <string>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

bool cmp(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<pair<int,float>> x;
    float cnt = 0;
    int leftover = stages.size();
    
    sort(stages.begin(), stages.end());
    
    for (int i = 1; i <= N; i++) {
        for (int j = 0; j < stages.size(); j++) {
            if (stages[j] == i) cnt++;
            else if (stages[j] > i) break;
        }
        if(leftover ==0) x.emplace_back(i, 0);
        else x.emplace_back(i, cnt / leftover);
        leftover -= cnt;
        cnt = 0;
    }
    
    sort(x.begin(), x.end(), cmp);
    
    for (int i = 0; i < x.size(); i++) answer.push_back(x[i].first);
    
    return answer;
}