프로그래머스 Lv1. 실패율

용상윤·2021년 5월 7일
0

문제

2019 KAKAO BLIND RECRUITMENT
https://programmers.co.kr/learn/courses/30/lessons/42889


접근

  1. 각 스테이지에 머물러 있는 유저 수를 구한다.

ex)

  • 총 스테이지 수(N) = 5
  • 유저 목록 = [2, 1, 2, 6, 2, 4, 3, 3] 일 때,

1탄에 있는 유저는 1명, 2탄의 유저는 3명....
따라서 N의 길이를 가진 배열을 구한다.

  1. 1에서 구한 배열을 이용하여 실패율을 나타내는 배열을 구한다, 이 때 index값을 포함한다.

  2. 실패율을 기준으로 배열을 내림차순하면, 뒤따라 온 2의 index값이 결과가 된다.


코드

js

function solution(N, stages) {
    let usersNum = stages.length; // 총 유저 수
    
    // 각 스테이지에 머물러 있는 유저 수
    let eachStageUser = [];
    for(var i=1; i < N+1; i++){
        let temp = 0;
        stages.forEach(x => {
            if(x == i){
                temp ++;
            }
        })
        eachStageUser.push(temp);
    }
    
    //각 스테이지의 실패율
    let fail = [];
    eachStageUser.forEach((x, i) => {
        fail.push([x/usersNum, i+1])
        usersNum = usersNum-x;
    })
    let result = [];
    fail.sort((a,b) => b[0]-a[0]).forEach(x => result.push(x[1]))
    
    return result
}

python

def solution(N, stages):
    users_num = len(stages)
    
    fails = []
    for i in range(1, N+1) :
        temp = 0
        for stage in stages :
            if stage == i :
                temp += 1
        if users_num != 0 :
            fails.append( [i, temp/users_num] )
        else :
            fails.append( [i, 0] )
        users_num = users_num - temp
    
    fails = sorted(fails, key= lambda x : x[1], reverse=True)
    
    result = []
    for fail in fails :
        result.append( fail[0] )
    
    return result

profile
달리는 중!

0개의 댓글