실패율

연쇄코딩마·2021년 1월 6일
0
post-thumbnail
post-custom-banner

실패율

설명 : 실패율

간단 문제설명 :
한마디로 정리하면 실패율을 구하는 것이다. (그 스테이지를 클리어 못하고 있는 유저의 수) / (전체 유저수)로 구할수 있다. 입출력 예에서 설명하자면 stages 배열의 길이는 총 유저를 말하는것이다. 만약에 배열요소가 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; //=> 리턴!
}

회고: 머리가 굳었다. 조금더 분발하자.

profile
只要功夫深,铁杵磨成针
post-custom-banner

0개의 댓글