개발 공부/알고리즘 문제 풀이

[프로그래머스] 실패율 (JavaScript)

종범2 2020. 6. 2. 21:05

문제

프로그래머스 2019 KAKAO BLIND RECRUITMENT 실패율

 

https://programmers.co.kr/learn/courses/30/lessons/42889#

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

언어

자바스크립트(JavaScript)

 

접근 방법

  1. 각 단계에서 실패한 유저수를 해당 단계까지 도전한 누적 도전자 수를 나누어 실패율을 계산한다.
  2. 누적 도전자수는 전체수에서 각 단계에서 실패한 유저수를 빼면서 구한다.
  3. stage와 실패율을 가지는 객체를 배열에 저장한다.
  4. 배열을 정렬한다. 실패율을 내림차순으로 정렬하고 실패율이 같다면 stage 오름차순으로 정렬한다.

코드

function solution(N, stages) {
    let arr = [];
    let totalNum = stages.length;
    for (let i=1; i<=N; i++){
        // 현재 단계에서 실패한 유저수를 계산
        // 현재까지의 누적 도전자수를 나누어 실패율 계산
        // 현재까지의 누적 도전자수에 실패한 유저수 빼기
        let stageNum = stages.filter(ele=> ele==i).length
        let failRatio = 0;
        if (stageNum===0){
            failRatio = 0;
        }else{
            failRatio = (stageNum)/totalNum;
        }
        totalNum -= stageNum;
        arr.push({idx:i,ratio:failRatio});
    }
    // 실패율 내림차순으로 정렬하고 실패율이 같다면 stage 오름차순으로 정렬
    arr.sort((a,b)=>{
        if(a.ratio>b.ratio){
            return -1;
        }else if (a.ratio<b.ratio){
            return 1;
        }else{
            if(a.idx>b.idx){
                return 1;
            }else{
                return -1;
            }
        }
    })
    return arr.map(ele=>ele.idx);
}

 

복기

  1. 문제 자체는 어렵지 않지만 filter와 sort를 사용하지 않고 해결하려면 코드가 복잡해진다. filter, sort 용법을 정확하게 미리 파악하고 있어야 한다.