본문 바로가기
코딩테스트/LV. 1

LV. 1 :: 실패율

by KUROMI98 2023. 1. 30.

https://school.programmers.co.kr/learn/courses/30/lessons/42889#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

function solution(N, stages) 
{
    var users = [];
    var count = 0;
    
    for(j=1; j<=N+1; j++)
    {
        count =0; // count를 0으로 초기화해준다.
        for (i=0; i<stages.length; i++)
        { // stages의 전체 요소에 대해서
            if (stages[i]>=j) count++;
            // stages[i]가 j 이상이라면 count를 1씩 늘려준다.
        }
        users.push(count);
        // count를 users에 넣어준다.
    }
    
    // users = [스테이지1에 도달한 유저의 수, 스테이지2에 도달한 유저의 수, ... 스테이지N+1에 도달한 유저의 수]
    
    // users = [8,7,4,2,1,1] 
    // users = [5,5,5,5,0]
    // users = [6,5,4,2,2,1,1,0,0,0,0]

// ------------------------------------------------------------------------------------------------------
    
    var fail_rate = [];
    var rate = 0;
    
    for (i=0; i<N; i++)
    {
        rate = (users[i]-users[i+1])/users[i];
        if (users[i]==0) {rate = 0;} // 이거 추가해주는게 아주 중요했음 분모가 0이면 null이 나와버려서..
        fail_rate.push(rate);
    }
    
    // fail_rate = [0.125,0.42857142857142855,0.5,0.5,0] 
    // fail_rate = [0,0,0,1] 
    // fail_rate = [0.16666666666666666,0.2,0.5,0,0.5,0,1,0,0,0]
    
// ------------------------------------------------------------------------------------------------------
    
    // [0.125,0.42857142857142855,0.5,0.5,0] > [3,4,2,1,5] 이렇게 출력해야 한다
    // [0,0,0,1] > [4,1,2,3] 이렇게 출력해야 한다.
    // [0.16666666666666666,0.2,0.5,0,0.5,0,1,0,0,0] > [7,3,5,2,1,4,6,8,9,10] 이렇게 출력해야
    
    // 그러려면 fail_rate의 가장 높은 값의 index를 추출해 answer이라는 배열에 push하고, 
    // fail_rate의 그 가장 높은 값을 -1로 변경한다.
    // 언제까지? i=0부터 i<fail_rate.index까지
    
    var answer = [];
    
    var max = 0;
    var index = 0;
    
    for (i=0; i<fail_rate.length; i++)
    {
        max = Math.max(...fail_rate); // fail_rate의 최대값을 max라고 하고,
        index = fail_rate.indexOf(max); // max의 fail_rate에서의 index를 index라고 하고
        answer.push(index+1); // index+1 를 answer라는 배열에 push한다.
        fail_rate.splice(index, 1, -1); // fail_rate의 최댓값을 음수인 -1로 교체해준다.
    }

// ------------------------------------------------------------------------------------------------------

    return answer;
}

댓글