728x90
반응형

2021.05.29

문제명 : 2019 KAKAO BLIND RECRUITMENT - 실패율

사용언어 : Javascript

개발 시간 : 90분

 

 

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

📋 문제 설명

실패율 = 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수

 

📢 입출력 예

예시 1을 보면, 최종단계(N)는 5단계이고, stages배열 [2, 1, 2, 6, 2, 4, 3, 3]입니다.

stages배열의 각각은 개개인이 현재 위치해있는 단계를 의미합니다.

 

따라서 stages 배열의 크기만큼 인원(8명)이 있고,

  • 1단계에 머무르고 있는 사람은 [2, 1, 2, 6, 2, 4, 3, 3] 한 명이므로 1단계 실패율 : 1/8 (=0.125)
  • 2단계에 머무르고 있는 사람은 2단계 이상 올라온 사람 중 [22, 6, 2, 4, 3, 3] 세명이므로 2단계 실패율 : 3/7 (=0.42)
  • 3단계에 머무르고 있는 사람은 3단계 이상 올라온 사람 중 [6, 4, 33] 세명이므로 3단계 실패율 : 2/4 (=0.5)

이런식으로 반복되면 실패율이 높은(큰) 단계는 3단계(0.5)→4단계(0.5)→2단계(0.42)→1단계(0.125)→5단계(0) 순입니다.

 

따라서 정답은 [3,4,2,1,5]입니다.

 

 

🔑 문제 풀이

function solution(N, stages) {
    var answer = [];
    var fail_arr = [];
    var total = stages.length;

    for(var i=1; i<=N; i++){
        
        var cnt = 0;
        for(var j=0; j<stages.length; j++){
            if(i == stages[j]){
                cnt++;                
            }
        }        
        
        // 실패율(per)순으로 정렬시키기 위해 json형태로 push
        fail_arr.push({per:cnt/total, idx:i});
        total -= cnt;
    }
    
    fail_arr.sort(function(a, b) { return b["per"] - a["per"]; });
    
    for(var i=0; i<fail_arr.length; i++){
        answer.push(fail_arr[i].idx);
    }
    
    return answer;
}

 

 

🔔 새로 알게 된 점

16번 라인 : fail_arr.push({per:cnt/total, idx:i}); 

딕셔너리로 관리할 수 있다.

 

728x90
반응형

+ Recent posts