[프로그래머스 lev1/JS] 실패율

woolee의 기록보관소·2022년 11월 8일
0

알고리즘 문제풀이

목록 보기
65/178

문제 출처

프로그래머스 lev1 - 실패율

문제

나의 풀이

1차 시도(70/100)

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]

2차 시도 (통과)

예상했던대로 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]);
}
profile
https://medium.com/@wooleejaan

0개의 댓글