말랑한 하루

[Programmers] 실패율 (Lv 1, JavaScript) 본문

문제풀이/Programmers

[Programmers] 실패율 (Lv 1, JavaScript)

지수는말랑이 2022. 7. 6. 18:54
반응형

[ 학습 내용 ]
- indexOf() : 원소값이 제일 처음 존재하는 배열의 인덱스 반환, 없는경우 -1

- lastIndexOf() : 원소값이 제일 마지막에 존재하는 배열의 인덱스 반환, 없는경우 -1

 

현재 스테이지를 기준으로 다음과 같이 준비했다.

1) accum : 누적 플레이어 수 (clear로 갱신)

2) clear : 스테이지를 클리어 한 플레이어 수 (이전 스테이지의 마지막 index 활용, 단 존재하지 않는경우 accum 사용)

3) fail : 스테이지에 도달하였지만 클리어하지 못한 플레이어 수 (현재 스테이지 마지막 index - 처음 index 활용)

 

[ 소스 코드 ]

function solution(N, stages) {
    var answer = [];
    var failure = [];
    
    for(var i=0; i<N; i++) {
        failure[i]= {
            "stage": i+1,
            "failrate": 0,
        }
    }
    stages.sort((o1, o2) => { return o2 - o1;});
    
    var accum = 0;
    for(var i=N; i>0; i--) {
        let clear = stages.lastIndexOf(i+1);
        accum = clear = clear == -1 ? accum : clear + 1;
        
        let fail = stages.lastIndexOf(i) - stages.indexOf(i);
        if (stages.lastIndexOf(i) !== -1) fail += 1;
        
        failure[i-1].failrate = fail/(clear+fail);
    }
    
    failure.sort((o1, o2) => { 
        return o2.failrate === o1.failrate
            ? o1.stage - o2.stage
            : o2.failrate - o1.failrate;
    })
    answer = failure.map((fail) => {return fail.stage;})
    return answer;
}

[ 심화 코드 ]

function solution(N, stages) {
    let result = [];
    for(let i=1; i<=N; i++){
        let reach = stages.filter((x) => x >= i).length;
        let curr = stages.filter((x) => x === i).length;
        result.push([i, curr/reach]);
    }
    result.sort((a,b) => b[1] - a[1]);
    return result.map((x) => x[0]);
}

[ 코드 분석 ]

JS로 알고리즘을 풀 때, filter의 활용이 다양하고 빈도수가 잦았다. filter에 대한 활용이 익숙해질 수 있도록 해야겠다.

index와 크거나 같은 경우 스테이지에 도달한 플레이어 수

index와 같은 경우 스테이지에 도달하였지만 클리어하지 못한 플레이어 수를 나타내

간단하게 result에 index와 실패율을 담을 수 있었다.

반응형
Comments