Algorithm/Programmers

[JS][프로그래머스]실패율

문제 번호

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

 

알고리즘 분류

 

문제 풀이

 자바스크립트의 배열 요소의 자료형에는 제한이 없다.

 

 

배열

 

ko.javascript.info

 

이를 이용해서 실패율을 먼저 계산한뒤 배열에 객체를 넣어준다. 그 이후 문제에서 주어진 조건에 따라서 정렬을 진행하고 난뒤, map 메서드를 사용하여 답을 반환한다. map 메서드의 반환값은 새로운 배열이다.

 

 

Array.prototype.map() - JavaScript | MDN

map() 메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.

developer.mozilla.org

 

인덱스 번호 === stage 번호를 맞추기 위하여 N+1 크기의 배열을 사용하였다.

let arrived = new Array(N+1).fill(0,0,N+1);    
let clear = new Array(N+1).fill(0,0,N+1);

 

전체코드

function solution(N, stages) {
    var answer = [];
    let arrived = new Array(N+1).fill(0,0,N+1);    
    let clear = new Array(N+1).fill(0,0,N+1);
    
    for(let i=0; i<stages.length; i++){
        for(let j=1; j<=stages[i]; j++){
            arrived[j]++;    
            clear[j-1]++;
        }        
    }
    
    for(let i=1; i<=N; i++){
        answer.push({'stage' : i , 'failPer' : (arrived[i] - clear[i]) / arrived[i] });        
    }
    
    return answer.sort((a,b)=>{
        if(a.failPer < b.failPer)   return 1;
        else if(a.failPer > b.failPer) return -1;
        return a.stage-b.stage;
    }).map(element => element.stage);    
}

 

 

 

특이사항

 자바스크립트에서는 배열의 범위를 벗어나서 사용하여도 별다른 에러가 발생하지않는다. undefined로 나온다.