PR - 실패율

Goody·2021년 3월 12일
0

알고리즘

목록 보기
65/122

문제 및 예시

지난 풀이 참고


풀이

  • 주어진 배열을 정렬하고, 길이를 따로 저장해둔다.
  • 배열을 순회하면서 다른 숫자가 나올 때까지는 curStage 배열에 연속해서 숫자를 저장한다.
  • 만약 다른 숫자가 나왔다면 curStage 배열의 길이를 남은 플레이어들의 수 (주어진 배열의 길이)로 나눠서 실패율을 구한다.
  • 빈 객채에 키는 스테이지, 값은 실패율로 따로 저장해둔다.
  • 객체를 배열화하고, 실패율을 기준으로 정렬한다.

코드

function solution(N, stages) {
    var answer = [];
    const sortedStages = stages.sort((a,b) => a-b);
    const stagesCopy = sortedStages.slice(0);
    let curStage = [];
    let failRate = 0;
    let players = stagesCopy.length;
    const obj = {};
    let stage = 1;

    for(let i = 0; i < stagesCopy.length; i++) {
        if(stagesCopy[i] === stagesCopy[i+1]) curStage.push(stagesCopy[i]);
        else {
            curStage.push(stagesCopy[i]);
            failRate = curStage.length/players;
            stage = curStage[0];
            if(stage > N) {
                failRate = 0;
            }
            obj[stage] = failRate;
            players -= curStage.length;
            curStage = [];
        }
    }


    for(let i = 1; i <= N; i++) {
        if(obj[i] === undefined) {
            obj[i] = 0;
        }
    }

    
    let sortObj = [];
    for(let number in obj) {
        sortObj.push([number, obj[number]]);
    }
    sortObj.sort((a,b) => {
        return b[1] - a[1];
    });

    for(let i = 0; i < sortObj.length; i++) {
        answer.push(Number(sortObj[i][0]));
    }
    
    if(answer[answer.length-1] > N) answer.pop();
 

    return answer;
}

0개의 댓글