문제

실패율은 다음과 같이 정의한다.
스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수

전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라.

통과한 코드 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function solution(N, stages) {
let answer = [];
for(let i = 1; i <= N; i++) {
let thisStageFailRate = stages.filter(s => s === i).length
let otherUserFailRate = stages.filter(s => s >= i).length
if (thisStageFailRate === 0) {
answer.push({stage: i, failRate: 0});
} else {
answer.push({stage: i, failRate: thisStageFailRate/otherUserFailRate});
}
}

return answer.sort((a,b) => (b.failRate === a.failRate)
? a.stage - b.stage : b.failRate - a.failRate)
.map(each => each.stage);
}

처음에 잘못 생각했던 것

  1. 실패율을 계산할 때 해당 스테이지를 클리어하지 못한 사용자 / 전체 사용자로 계산했던 것
    => 현재 스테이지를 클리어하지 못한 사용자 / 현 스테이지보다 높은 스테이지로 넘어간 사용자 수 로 계산해야 했음
  2. 실패율만 배열에 push 했던 것
    => 배열에 스테이지값과 실패율을 각각 갖는 객체를 push하여 객체 내 실패율로 sort한 후에 스테이지 값을 return할 수 있도록 map 함수를 사용해야 했음