Array ( )

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

2018-10-02 00:48:23 | 조회수 2497



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번문제 - 알고리즘닷컴
32 개의 글