문제 출처
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