프로그래머스
totalNum = stages.length
떨어진 인원/totalNum
arr.push({idx: i, ratio: 실패율})
👉 단계와 실패율을 하나의 객체로 저장해 배열에 푸시한다.sort
를 사용해 내림차순으로 정렬하고, 실패율이 같다면 단계의 오름차순으로 정렬한다. function solution(N, stages) {
const arr = [];
let totalNum = stages.length; //스테이지에 도달한 모든 플레이어 수
for(let i=1; i<=N; i++){
const stageNum = stages.filter(el => el===i).length; // i번째 단계에서 탈락한 인원수
let failRatio = 0;
if(stageNum===0) failRatio=0;
else{
failRatio = stageNum/totalNum;
}
totalNum -= stageNum;
arr.push({idx: i, ratio: failRatio});
}
arr.sort((a,b) => {
if(a.ratio > b.ratio){
return -1;
}else if(a.ratio < b.ratio){
return 1;
}else{
if(a.idx > b.idx){
return 1;
}else{
return -1
}
}
})
return arr.map(el => el.idx);
}
sort는 compareFunction을 인자로 받을 수 있다. compareFunction에 따라 오름차순 또는 내림차순으로 정렬된다. 배열은 compareFunction에 요소를 2개씩 반복해서 보내고, 두 요소의 차가 음수인지 양수인지, 0인지에 따라 정렬한다. 요소가 a,b인 경우 다음과 같이 정렬된다.
const arr = [1,4,6,2,5];
//오름차순 정렬
arr.sort((a,b) => {
if(a-b>0) {return 1;} //a가 b보다 크면 위치바꾸기
else if(a-b<0) {return -1;} //a가 b보다 작으면 위치 그대로
else {return 0}
});
//[1, 2, 4, 5, 6]
//내림차순 정렬
arr.sort((a,b) => {
if(a-b>0) {return -1;} //a가 b보다 크면 위치 그대로
else if(a-b<0) {return 1;} //b가 a보다 크면 위치 바꾸기
else {return 0}
});
//[6, 5, 4, 2, 1]
오름차순에서는 a-b가 양수일때 위치를 바꾸고, 내림차순에서는 a-b가 음수일때 위치를 바꾼다.
reference