[프로그래머스] 실패율 | Javascript

Hailey Song·2021년 1월 20일

문제

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

이번엔 함수 분리를 안했당ㅎㅎ 코딩테스트를 할 때 함수 모듈화하는 연습도 같이 하는데, 어디선가 모듈화를 하지 말라는 조건을 본 것 같아서, 아 코테에선 모듈화가 중요하지는 않나? 싶기도 하고..

실패율을 객체 형태로 저장해주어야 하나, 배열로 저장한 후 인덱스 기준으로 정렬을 해야하나 고민했는데 인덱스는 까다로울 것 같아서 객체로 저장했다.

풀이

function solution(N, stages) {
    let stageRecord = {};
    
  // 모든 스테이지를 돌면서
    for (let i = 1; i <= N; i++) {
        let curStage = i;
        let arrivedButNotClearedPlayers = 0;
        let clearedPlayers = 0;
        
      // 스테이지에 도달했지만 클리어하지 못한 플레이어의 수와, 클리어한 플레이어 수를 구한다
        stages.forEach((stage) => {
            if (stage === curStage) arrivedButNotClearedPlayers++;
            if (stage > curStage) clearedPlayers++;
        });
        
      // 실패율을 구한다
        let failureRate = !arrivedButNotClearedPlayers 
            ? 0 
            : arriveButNotClearedPlayers / clearedPlayers;
        
      // stageRecore에 curStage를 키로 하여 실패율을 저장한다
        stageRecord[curStage] = failureRate;
    }
    
  // stageRecore의 모든 키를 순회하면서 문자열로 바뀐 키들을 숫자로 변환해준 후 조건에 따라 정렬한다
    return Object.keys(stageRecord)
      .map(stage => +stage)
      .sort((a, b) => {
        if (stageRecord[a] > stageRecord[b]) return -1;
        if (stageRecord[a] < stageRecord[b]) return 1;
        if (stageRecord[a] === stageRecord[b]) {
            return a - b;
        }
    });
}

0개의 댓글