[프로그래머스] LV.1 실패율


Problem | 실패율


✨ 접근 방식

  1. 반복문을 돌면서 전체 인원, 각 단계에 멈춰있는 인원을 카운트
  2. map을 돌면서 실패율을 계산하며 map에 값을 넣어준다.
  • 1번에서 구했던 것을 이용하여, 실패율은 [ 멈춰있는 인원 / (전체 인원) ] 을 구해주어야하는데 단계가 이동할 때마다 해결한 인원을 전체인원에서 빼주어야 한다.
  • 예를 들어, 1단계에 있는 인원이 2명이라면 2단계 실패율을 검사해줄 땐 [멈춰있는 인원 / 전체인원 - 2 명] 이 되는 것이다.
  1. map의 value 기준으로 정렬하고 key 값을 answer에 대입해준다.

- ✔️ 전체코드

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

  let players = 0;

  let total_stage = new Array(N).fill(0);
  for (let player of stages) {
    player <= N ? total_stage[player - 1]++ : false;
    players++;
  }

  const mapH = new Map();
  total_stage.map((player, i) => {
    mapH.set(i + 1, player / players);
    players -= player;
  });
  const tmp = [...mapH].sort((player1, player2) => (player1[1] < player2[1] ? 1 : player1[1] > player2[1] ? -1 : 0));
  
  for (let x of tmp) answer[answer.length] = x[0];
  
  return answer;
}

Map 객체를 정렬하는 방법이 여러가지가 있을 것이다. 배열로 만들어서 reduce 와 sort를 쓰는 방식이 있을 것이고 나처럼 sort만 이용하는 경우도 있을 텐데 es6 문법인 스프레드 써서 하는 것이 제일 깔끔한 것 같다. (tmp라는 일회성 변수를 쓰는 것을 제외.. 하고!)

추가적으로, for문을 사용하고 싶지 않아서 map 을 이용했는데 map 의 용도와 너무 다르게 쓰기도 했고, players 라 변수를 map 내부에서 변경해주는 것은 좋지 않는데 그렇게 사용했다 ( ... ) 다른 선택지가 떠오르지 않았다.

좋은 웹페이지 즐겨찾기