문제설명
- 실패율: 스테이지에 도달했으나 클리어하지 못한 플레이어 수 / 스테이지에 도달한 플레이어 수
- 전체 스테이지의 개수 N, 사용자가 현재 멈춰있는 스테이지 번호가 담긴 배열 stages
- 각 스테이지의 번호를 실패율의 내림차순으로 정렬
제한사항
- 스테이지의 개수 N은 1이상 500이하의 자연수
- stages의 길이는 1이상 200,000이하
- stages에는 1이상 N+1이하의 자연수가 담김
- 각 자연수는 사용자 현재 도전중인 스테이지
- N+1은 마지막 스테이지까지 클리어한 사용자
- 실패율이 같은 스테이지가 있다면 오름차순 번호의 스테이지 정렬
- 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0
풀이
function solution(N, stages) {
let result = [];
let filterStages = stages.filter(stage=> stage !== 1);
for(let i=1;i<=N;i++){
let count = 0;
if(i === 1){
for(let j=0;j<stages.length;j++){
if(i === stages[j])
++count;
}
result.push(count / stages.length);
}
else{
filterStages = filterStages.filter(stage=> stage !== i-1);
for(let j=0;j<filterStages.length;j++){
if(filterStages[j] === i){
++count;
}
}
result.push(count / filterStages.length);
}
}
if(result.filter(i=>i!==0).length === 1){
let finalNum = result.indexOf(1) + 1;
result = result.map((per,idx)=>{
if(idx === 0)
return per = finalNum;
else
return per = idx;
})
return result;
}else{
result = result.map((per,idx)=>[per,idx+1]).sort((a,b)=>b[0]-a[0])
.map(per=>per[1]);
return result;
}
}