프로그래머스 문제 풀이 실패율 (JS)

실패율

문제
스테이지 개수를 나타내는 숫자형 데이터 N과, 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지 번호가 담겨있는 배열을 return하는 solution 함수를 만들자

제한사항
1. N은 1이상 500이하의 자연수
2. stages의 길이는 1이상 200,000 이하
3. stages[i]는 1이상 N+1 이하의 자연 수

* 각 자연수는 사용자가 현재 도전 중인 스테이지의 번호를 나타냄
* 단, N+1은 마지막 스테이지까지 클리어 한 사용자를 나타낸다.
  1. 만약 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 설계
  2. 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0으로 정의

풀이

function solution(N, stages) {
    let StagesLength = stages.length;
    let temp = 0;
    const result = [];
    // 실패율을 계산하고 해당 stage까지 배열로 반환하는 함수 calfail 설정
    const calfail = (stage,len) => {
        temp = stages.filter((data)=>data===stage).length;
        if(temp) return [temp / len, stage];
        return [0,stage];
    }
    // 스테이지를 순회하며 전 단계에 머무른 사용자를 전체 길이에서 제거하고,
    // 남은 사용자와 stage를 인수로 calfail 함수 호출
    // 해당 데이터 result에 push     
    for(let i = 1; i<=N; i++) {
        StagesLength = StagesLength-temp;
        let failure = calfail(i,StagesLength);
        result.push(failure);
    }
// 실패율이 같다면, 번호가 낮은 순으로 정렬
// 아니라면 실패율 내림차순으로 정렬
result.sort((a,b)=>{
 if(a[0]===b[0]) return a[1]-b[1];
 return b[0]-a[0];
})
// 배열에서 스테이지 번호만 출력
 return result.map((data)=>data[1]);
}

좋은 웹페이지 즐겨찾기