function solution(N, stages) {
let fail = new Array(N+1).fill(0);
let notCl=0;
for (let i=1; i<=N; i++) {
for (let j=0; j<stages.length; j++) {
if (i === stages[j]) {
notCl++;
}
}
fail[i]=notCl;
notCl=0;
}
let suc=0;
let ans = new Array(N+1).fill(0);
for (let i=1; i<fail.length; i++) {
ans[i]=fail[i]/(stages.length-suc);
suc+=fail[i];
}
ans.shift();
let len = ans.length;
let answer=[];
let max = Number.MIN_SAFE_INTEGER;
while (len--) {
max=Math.max(...ans);
answer.push(ans.indexOf(max)+1);
ans[ans.indexOf(max)]=-1;
}
return answer;
}
console.log(solution(5, [2, 1, 2, 6, 2, 4, 3, 3]));
// [3, 4, 2, 1, 5]
예상했던대로 Math.max에서 문제가 생겼던 것 같다.
아이디어는, 오브젝트로 ans를 obj에 담고, 그 obj를 다시 배열로 만들어서 sort 한 다음에 뽑아내는 방식.
근데 너무 더럽게 풀었다.
function solution(N, stages) {
let fail = new Array(N+1).fill(0);
let notCl=0;
for (let i=1; i<=N; i++) {
for (let j=0; j<stages.length; j++) {
if (i === stages[j]) {
notCl++;
}
}
fail[i]=notCl;
notCl=0;
}
let suc=0;
let ans = new Array(N+1).fill(0);
for (let i=1; i<fail.length; i++) {
ans[i]=fail[i]/(stages.length-suc);
suc+=fail[i];
}
let obj={};
for (let i=1; i<ans.length; i++) {
obj[i]=ans[i];
}
let objArr = [];
for (let x in obj) {
objArr.push([x, obj[x]]);
}
objArr.sort((a,b) => b[1]-a[1]);
let answer = [];
for (let x of objArr) {
answer.push(Number(x[0]));
}
return answer;
}
console.log(solution(5, [2, 1, 2, 6, 2, 4, 3, 3]));
// [3, 4, 2, 1, 5]
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]);
}