프로그래머스 Lv. 1 2019 KAKAO 실패율

FE 개발자 신상오·2022년 6월 28일
0

프로그래머스

목록 보기
16/20
post-thumbnail

문제

풀이

// N : 최대 스테이지
// stages : 플레이어들이 현재 어떤 스테이지에 있는 지 담긴 배열

// N까지 반복문을 돌면서 각 스테이지를 얼만큼 넘겼나 확인 객체 값으로 담기

let arr = [];
let dropout = [];
let result = [];

function solution(N, stages) {
    for (let i = 0; i < N; i++){
        
        arr = stages.filter((el) => el <= (i + 1));
        dropout = stages.filter((el) => el <= i);
        curStage = stages.filter((el) => el >= (i + 1));
        
        result.push([i + 1, (arr.length - dropout.length) / curStage.length])
    }
    result.sort((a, b) => b[1] - a[1]);
    return result.map((el) => el[0]);
}

해설

1. 반복문 돌면서 [스테이지, 실패율]로 result 배열 만듦

반복문을 돌면서 각 스테이지에 몇 명이 통과했는지 체크
arr : 해당 스테이지 이전 스테이지를 플레이하고 있는 사람
dropout : 해당 스테이지에 아직 도달 못한 사람을 제외하기 위한 변수
curStage : 해당 스테이지를 클리어한 사람

result : (arr - dropout) / curStage

function solution(N, stages) {
    for (let i = 0; i < N; i++){
        
        arr = stages.filter((el) => el <= (i + 1));
        dropout = stages.filter((el) => el <= i);
        curStage = stages.filter((el) => el >= (i + 1));
      
      result.push([i + 1, (arr.length - dropout.length) / curStage.length])

2. result 배열을 실패율 내림차순으로 정렬

내림차순 sort
result.sort((a, b) => b[1] - a[1]);

3. 실패율이 높은 스테이지 순으로 정렬된 배열 return

map 메서드이용 스테이지가 담긴 0번째 인덱스만 추출
return result.map((el) => el[0]);


좀 더 깔끔한 코드

  1. 0스테이지는 없기 때문에 반복문에서 제외해도 됨
  2. arr - dropout이 아니라 stages.filter((el) => el === i) 로 해당 스테이지에
    도달 했지만 아직 클리어 못 한 사람을 걸러 낼 수 있음
const   result = [];

function solution(N, stages) {
    
    for (let i = 1; i <= N; i++){
        
       let curStage = stages.filter((el) => el === i).length;
       let passStage = stages.filter((el) => el >= i).length;
        
        result.push([i, (curStage / passStage)])
    }
    result.sort((a, b) => b[1] - a[1]);
    return result.map((el) => el[0]);
}

해설

curStage : 현재 스테이지에 도전중인 인원 수 => 도달했지만 클리어는 못 함 (실패)
passStage : 현재 스테이지 클리어한 인원 수
실패율 : curStage / passStage

result : [스테이지, 실패율]

   let curStage = stages.filter((el) => el === i).length;
   let passStage = stages.filter((el) => el >= i).length;

이후 sort, map 풀이는 위와 같음

profile
주간 회고용 블로그입니다 (개발일지와 정보글은 티스토리에 작성합니다.)

0개의 댓글