https://programmers.co.kr/learn/courses/30/lessons/42889
function solution(N, stages) {
let answer = [];
let failure = 0;
let failMan = 0;
let player = stages.length;
for(let j = 1; j < N+1; j++){
for(let i = 0; i < stages.length; i++){
if(stages[i] === j){
failMan++;
}
failure = 0;
}
failure = failMan / player;
answer.push({index:j, failure:failure});
player -= failMan;
failMan = 0;
}
answer.sort((a,b) => {
if(a.failure > b.failure)
return -1;
else if(a.failure == b.failure)
return 0;
else
return 1;
})
return answer.map(e => e.index);
}
1단계 문제들을 풀면서 정렬 문제가 많다고 느꼈다.
그 중 오름차순, 내림차순, 배열 값 비교가 있는데 Array.sort((a,b) => ???) 에서
???안에 들어가는 코드를 잘 짜야겠다고 느꼈다. a는 먼저 오는 값, b는 나중에 오는 값으로
a, b를 비교하여 return 1,0,-1을 잘 반환해야겠다.
(sso님의 velog에서)
// 객체 이용 X
function solution(N,stages) {
var answer = [],
result = [];
for(var i =0; i < N; i++) {
var a = stages.filter(word => word >= i+1).length;
var b = stages.filter(word => word == i+1).length;
if( b===0){
result.push(0);
}else {
result.push(b/a);
}
}
for(var i =0; i < N; i++) {
var index = result.indexOf(Math.max.apply(null, result));
answer.push(index+1); //answer[i] = index+1;도 가능
result[index] = -1;
}
return answer;
}
filter을 이용하여 코드의 양이 확 줄어들었다..
result 배열(실패율 값이 들어가 있는 배열)에서 최대값의 index 값을 찾아 answer에 넣고
최대값을 -1로 만들어 제외 시킨다.
배열에 배열을 붙이기 위해 apply사용
Math.max.apply