失敗率


失敗率


説明:失敗率
簡単な質問の説明:
要するに失敗率を求めることだ.(このステージをクリアできないプレイヤー数)/(全プレイヤー数).I/Oの例では、ステージ配列の長さはユーザ全体を指します.配列要素が1の場合、1は現在1つしかありません.そのプレイヤーは1でクリアできない.だから第1段階で失敗率を求めるのは1/8です.配列要素が2であれば、2は現在3つです.前の説明によると、3/8のはずですが、すでに計算されているプレイヤーは除外されているので、3/7です.また、3は2/4で、このまま続けます.
コード:
function solution(N, stages) {
  //=> 필터링 부분
  const failRatio = getFail(N, stages);
  return failRatio.sort((a, b) => b.ratio - a.ratio).map((ele) => ele.idx); //=> sort를 이용한 내림차순으로 정렬하였고 map으로 idx의 요소들만 골라내여 배열에 담았음!
}
function getFail(N, stages) {
  //=> 기본 실패율을 구하는 함수 
  const temp = [];//=> 중간결과 값을 담을 배열
  let result; //=> 각 스테이지의 실패율을 담을 상자 
  let stagelen = stages.length; //=> 총 유저의수
  for (let i = 1; i <= N; i++) { //=> N은 스테이지수를 의미한다. 입출력 예시에 6이 있는데 굳이 6까지 갈필요가 없다.
    let stage = stages.filter((e) => e === i).length; //=> 필터로 스테이지를 골라냄 그래서 그거의 길이를 구하면 그 스테이지를 클리어 못하는 있는 유저의수가 됨
    if (stage === 0) {
      result = 0; //=> 만약에 유저수가 영이라면 결과에 0을 담아야함.
    } else {
      result = stage / stagelen; 
      //=>  유저수가 있는 경우에는 실패율이 결과값에 담겨야됨
    }
    stagelen -= stage; 
    //=> 이부분은 분모에 해당하는 전체유저를 앞서 산출하였던 부분을 제외시켜주는 부분이다. 
    temp.push({ idx: i, ratio: result }); //=> 결과 값을 담아줌.
  }
  return temp; //=> 리턴!
}
振り返る:髪の毛がかじかんだ.もっと力を入れる.