[algorithm/programmers] 실패율

stella·2020년 6월 26일

algorithm

목록 보기
7/7

실패율

문제

실패율

풀이

function solution(N, stages) {
    var answer = [];
    let failureStages = [];
    for(let i = 1; i <= N; i++){
        const totalUser = stages.filter(e => e >= i).length;
        const failUser = stages.filter(e => e == i).length;
        const failureRate = failUser / totalUser || 0; //NaN 일 경우
        failureStages.push({stage : i , rate : failureRate})
    }
    failureStages.sort((a, b) => {
        if(a.rate === b.rate){
            return a.stage - b.stage;
        }
        return b.rate - a.rate
    })
    failureStages.forEach(e => answer.push(e.stage))
    return answer;
}
  1. 총 스테이지의 실패율을 알아야 하므로 총 스테이지 숫자 기준으로 반복을 함
  2. filter를 사용하여 해당 스테이지 도전자 (해당 스테이지까지 간 사람 , 넘은사람) 추출
  3. filter를 사용하여 해당 스테이지에 멈춘 (아직 통과못한 실패자) 추출
  4. 0 / 0 을 하면 NaN이 나오기 때문에 저번에 개장님이 알려준 이항연산자방식으로 처리.
  5. 비교는 실패율로 하되 해당 스테이지 번호를 리턴하는것이 목적이라 객체리터럴로 저장
  6. 정렬 -> 실패율이 같은 경우에는 오름차순이어야 하므로 따로 처리
  7. 다시 반복하여 stage만 골라서 배열에 넣기

리팩토링 손댈만한 곳 많을거 같은데......
필터로 계속 뽑아내는게 비 효율적인것 같긴한데 포문으로 해서 가져오는게 뭐가 좋을까.

profile
겔름뱅이

0개의 댓글