180. 실패율

아현·2021년 7월 11일
0

Algorithm

목록 보기
185/400
post-custom-banner

프로그래머스




1. Python


런타임 에러



def solution(N, stages):
    #실패율
    #스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
    count = [0] * (N + 2)
    rate = []
    result = []
    for stage in stages:
        count[stage] += 1
        
    for i in range(1, N + 1):
        r = count[i]/sum(count[i:]) 
        rate.append((r, i) )

    rate.sort(key = lambda x: (-(x[0])))


    for i in range(0, N):
      result.append(rate[i][1])

        
    return result
    
    

정답



def solution(N, stages):
    answer = []
    length = len(stages)

    # 스테이지 번호를 1부터 N까지 증가시키며
    for i in range(1, N + 1):
        # 해당 스테이지에 머물러 있는 사람의 수 계산
        count = stages.count(i)
        
        # 실패율 계산
        if length == 0:
            fail = 0
        else:
            fail = count / length
        
        # 리스트에 (스테이지 번호, 실패율) 원소 삽입
        answer.append((i, fail))
        length -= count

    # 실패율을 기준으로 각 스테이지를 내림차순 정렬
    answer = sorted(answer, key=lambda t: t[1], reverse=True)
    
    # 정렬된 스테이지 번호 반환
    answer = [i[0] for i in answer]
    return answer




2. C++



#include <bits/stdc++.h>

using namespace std;

bool compare(pair<int, double> a, pair<int, double> 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<pair<int, double> > v;
    vector<int> answer;
    int length = stages.size();

    // 스테이지 번호를 1부터 N까지 증가시키며
    for (int i = 1; i <= N; i++) {
        // 해당 스테이지에 머물러 있는 사람의 수 계산
        int cnt = count(stages.begin(), stages.end(), i);

        // 실패율 계산
        double fail = 0;
        if (length >= 1) {
            fail = (double) cnt / length;
        }

        // 리스트에 (스테이지 번호, 실패율) 원소 삽입
        v.push_back({i, fail});
        length -= cnt;
    }

    // 실패율을 기준으로 각 스테이지를 내림차순 정렬
    sort(v.begin(), v.end(), compare);

    // 정렬된 스테이지 번호 반환
    for (int i = 0; i < N; i++) {
        answer.push_back(v[i].first);
    }
    return answer;
}


profile
For the sake of someone who studies computer science
post-custom-banner

0개의 댓글