[프로그래머스] LV.1 실패율
Problem | 실패율
✨ 접근 방식
- 반복문을 돌면서 전체 인원, 각 단계에 멈춰있는 인원을 카운트
- map을 돌면서 실패율을 계산하며 map에 값을 넣어준다.
- 1번에서 구했던 것을 이용하여, 실패율은 [ 멈춰있는 인원 / (전체 인원) ] 을 구해주어야하는데 단계가 이동할 때마다 해결한 인원을 전체인원에서 빼주어야 한다.
- 예를 들어, 1단계에 있는 인원이 2명이라면 2단계 실패율을 검사해줄 땐 [멈춰있는 인원 / 전체인원 - 2 명] 이 되는 것이다.
- 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 내부에서 변경해주는 것은 좋지 않는데 그렇게 사용했다 ( ... ) 다른 선택지가 떠오르지 않았다.
Author And Source
이 문제에 관하여([프로그래머스] LV.1 실패율), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mingsomm/프로그래머스-LV.1-실패율저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)