[프로그래머스 레벨 1 JavaScript] '실패율' 풀이

6986 단어 JavaScriptJavaScript

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42889

function solution(N, stages) {
  let answer = [];
  let stageLen = stages.length;
  for (let i = 1; i <= N; i++) { // 각 스테이지 검사
    let stageNum = stages.filter((item) => item == i).length; // 해당 스테이지 못깬사람 몇명인지 저장
    let fail = 0;
    if (stageNum == 0) {
      fail = 0;
    } else {
      fail = stageNum / stageLen; // 실패율 계산
    }
    stageLen -= stageNum; // 각 단계에서 실패한 사람 빼주기
    answer.push({ idx: i, failPercent: fail }); // object에 저장
  }

  answer.sort((a, b) => {
    if (a.failPercent > b.failPercent) {
      //실패율 내림차순 정렬
      return -1;
    } else if (a.failPercent < b.failPercent) {
      return 1;
    } else {
      // 실패율 같으면 인덱스 오름차순 정렬
      if (a.idx < b.idx) {
        return -1;
      } else {
        return 1;
      }
    }
  });
  return answer.map((item) => item.idx); // stage만 출력
}

sort() 함수 잘 기억하자
반환값 < 0 : a가 b보다 앞에 있어야함
반환값 = 0 : a와 b의 순서 바꾸기 x
반환값 > 0 : b가 a보다 앞에 있어야 함

좋은 웹페이지 즐겨찾기