Level1 - 실패율

Lee Ju-Hyeon(David)·2021년 11월 3일
0
post-thumbnail

문제 출처

Solution

function solution(N, stages) {
  let tmp = []
  let nonClearPlayer = Array.from({
    length: N
  }, () => 0)
  let stageCount = Array.from({
    length: N
  }, () => 0)

  stages.forEach(playerStage => {
    if (playerStage <= N) nonClearPlayer[playerStage - 1]++
    for (let i = 1; i <= playerStage; i++) {
      if (i <= N) stageCount[i - 1]++
    }
  })

  for (let i = 0; i < N; i++) {
    const dict = {}
    dict["num"] = i + 1
    dict["rate"] = nonClearPlayer[i] / stageCount[i]
    tmp.push(dict)
  }
  return tmp.sort((a, b) => b.rate - a.rate).map(el => el["num"])
}
  • nonClearPlayer에 각 스테이지 별로 클리어하지 못하고 머무르는 인원 수 저장
  • stageCount에 각 스테이지 별로 지나쳐간 인원과 머물러 있는 인원 수의 합 저장
  • tmp에 "num" : 스테이지 번호, "rate" : 실패율의 형태로 Object 객체 생성
  • 실패율을 기준으로 정렬한 뒤 스테이지 번호만 배열로 반환

Clean-up

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]);
}
  • reach에 도달한 인원수 저장
  • curr에 현재 머무르고 있는 인원수 저장
  • 실패율을 계산하여 result에 push

0개의 댓글