2019 카카오 신입 공채 1차 코딩 테스트 풀이 - 2번문제


작성일 : 2018-10-02 00:48:23
조회수 : 821



본문

2번 문제를 요약하면, (현재 스테이지를 도전중인 사람 / 도전중인 사람+통과한 사람) 을 실패율로 정의하고, 실패율이 큰 순서대로 정렬시키면 되는 문제입니다.


만약 스테이지가 동일하다면 스테이지가 작은 순서대로 정렬해주는 예외만 처리해주면 되는 간단한 문제입니다.


실패율을 계산할 때, 분모를 처음에 사람의 수로 시작하여, 각 스테이지에서 머무르고 있는 사람의 수를 빼면 됩니다. 단, 아직 아무도 도달하지 못한 스테이지의 경우 분모가 0이 되면 예외가 발생하므로, 이를 유의하여 코딩해주면 됩니다.

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

using namespace std;


class Node {
public:
    int no;
    double rate;
    
    bool operator < (const Node &n) const {
        return rate == n.rate ? no < n.no : rate > n.rate;
    }
} node[511];

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<int> stage(N+2);
    
    for(int user : stages) {
        stage[user]++;
    }
    int cur = stages.size();
    for(int i=1; i<=N; i++) {
        node[i].no = i;
        node[i].rate = stage[i] / (double)cur;
        cur -= stage[i];
        if(!cur) cur=1;
    }
    sort(node+1,node+N+1);
    for(int i=1; i<=N; i++) {
        answer.push_back(node[i].no);
    }
    return answer;
} 

2019 카카오 신입 공채 1차 코딩 테스트 풀이 - 2번문제 - 알고리즘닷컴
취업 대비 알고리즘에서는 다양한 기업들의 기출 문제 및 경향, 풀이 등에 대한 포스팅을 다룹니다.