끄적끄적 코딩
article thumbnail

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;
}

검색 태그