2019 KAKAO BLIND RECRUITMENT (2019 카카오 블라인드 채용 문제)
각 스테이지의 실패율을 구해서 내림차순으로 정렬하는 문제입니다.
1. 스테이지 배열을 내림차순으로 정렬 한 후
2. 스테이지를 높은 위치에서부터 낮은 위치로 반복문을 실행합니다.
3. 탐색중인 스테이지보다 높은 스테이지들은 분모가 되고 해당 스테이지는 분자가 됩니다.
4. 현재 스테이지와 해당 분수값을 저장합니다.
5. 1~4의 과정을 거친 후에 값이 높은 순대로, 같을 경우 스테이지가 낮은 순서로 정렬합니다.
*분자가 없는 경우 0으로 처리해줍니다. (0으로 나눌 수 없음)
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
bool compare(pair<int, double> a, pair<int, double> b)
{
if (a.second == b.second)
{
return a.first < b.first;
}
else
{
return a.second > b.second;
}
}
vector<int> solution(int num, vector<int> stages)
{
double resolve = 0.0;
double unresolve = 0.0;
int index = 0;
vector<int> answer;
vector<pair<int, double>> result;
sort(stages.begin(), stages.end(), greater<>());
for (int i = num; i > 0; --i)
{
while (i <= stages[index] && index < stages.size())
{
resolve += 1.0;
if (i == stages[index])
{
unresolve += 1.0;
}
++index;
}
if (unresolve == 0.0)
{
result.push_back(make_pair(i, 0));
}
else
{
result.push_back(make_pair(i, unresolve / resolve));
}
unresolve = 0.0;
}
sort(result.begin(), result.end(), compare);
for (int i = 0; i < result.size(); ++i)
{
answer.push_back(result[i].first);
}
return answer;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 1062번 가르침 (0) | 2021.03.14 |
---|---|
[C++] 백준 11723번 집합 (0) | 2021.03.14 |
[C++] 프로그래머스 - 블록 이동하기 (0) | 2021.03.08 |
[C++] 프로그래머스 - 외벽 점검 (0) | 2021.03.03 |
[C++] 프로그래머스 - 후보키 (0) | 2021.03.01 |