어제의 나보다 성장한 오늘의 나

[프로그래머스][2019 KAKAO BLIND RECRUITMENT][자바스크립트] 실패율 본문

알고리즘/프로그래머스(Programmers)

[프로그래머스][2019 KAKAO BLIND RECRUITMENT][자바스크립트] 실패율

NineOne 2021. 5. 5. 15:45

programmers.co.kr/learn/courses/30/lessons/42889?language=javascript

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr

function solution(N, stages) {
  var answer = [];

  const clearStage = [];
  clearStage[N+1] = 0;
  clearStage.fill(0, 1);
  
  // 클리어 한 사람 구하기
  for(let i=0; i<stages.length; i++){
    clearStage[stages[i]]++;
  }
  
  // 실패율 구하기
  let goalStage = clearStage[N+1];
  const result = [];
  result[N] = {};
  for(let i= N; i>0; i--){
      goalStage += clearStage[i];
      result[i] = { index: i , value: clearStage[i] / goalStage };
  }
  
  // 조건에 맞게 정렬
  result.sort((a,b) => {
    if(a.value === b.value) return a.index - b.index // 오름차순
    return b.value - a.value // 내림차순 
  })

  for(let i=0; i<result.length-1; i++){
    answer.push(result[i].index);
  }
    
  return answer;
}

정리

  • 먼저 클리어 한 사람을 구한다.
  • 꼭 처음부터 차례대로 할 구할 필요 없이 스테이지를 도달 다 한 사람부터 하면 편하다. 위에서 구한 클리어 한 사람과 스테이지 도달한 사람을 나누면서 차례대로 실패율을 구하면 된다.
  • 조건에 맞게 내림차순으로 하되 index가 작은 순으로 정렬한다.
Comments