


function solution(N, stages) {
var answer = [];
const failureRate = [];
for (let i = 1; i <= N; i++) {
failureRate.push([i,
stages.filter(function (element) {
if (element === i) return true;
}).length /
stages.filter(function (element) {
if (element >= i) return true;
}).length
]);
}
failureRate.sort(function(a,b) {
return b[1]-a[1];
})
answer = failureRate.map(function(element) {
return element[0];
})
return answer;
}
✳️ 풀이 과정 :
1️⃣ 단계별 실패율을 구한다.
실패율 ➡️ (stages 배열 내 i의 갯수 / stages 배열 내 i 이상의 수의 갯수)
2️⃣ failureRate배열안에 [단계,실패율]을 반복적으로 push 한다.
3️⃣ 실패율을 기준으로 sort()한다.
4️⃣ sort()된 배열의 각 요소의 첫번째 요소를 뽑아서 answer 만든다.
(map() 메소드 사용)
function solution(N, stages) {
let ans = []
for (let i = 1; i <= N; ++i) {
let usersReachedCurrentStage = stages.reduce((acc, curStage) => acc + ((curStage >= i) ? 1 : 0), 0)
let usersStagnatedCurrentStage = stages.reduce((acc, curStage) => acc + ((curStage == i) ? 1 : 0), 0)
if (usersReachedCurrentStage === 0) {
ans.push({ 'stage': i, 'failRate': 0 })
continue
}
ans.push({ 'stage': i, 'failRate': (usersStagnatedCurrentStage / usersReachedCurrentStage) })
}
return ans.sort((a, b) => {
if (a.failRate > b.failRate) return -1
if (a.failRate < b.failRate) return 1
return a.stage - b.stage
}).map(entry => entry.stage)
}
✳️ 풀이과정 :
for문을 돌리고 sort()로 정렬하고 map()으로 스테이지 나열을 위한 새로운 배열을 뽑는 과정까지.. 거의 흡사하다.
출처 : https://programmers.co.kr/learn/courses/30/lessons/42889