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

1280 단어 algorithmalgorithm

문제

실패율

나의 접근방법

stages 배열을 for 루프를 돌면서 각 단계별 clear 한사람들을 카운팅했다.
N단계로 되어있지만 stages에 N 단계보다 큰 사람들이 존재했기 때문에 이 사람들은 N+1인덱스에 카운팅을 해주었다.
이번엔 N번부터 1번까지 for 루프를 또 돌면서 각 단계 도달인원을 카운팅했고, 동시에 실패율을 계산해서 rate라는 배열에 이차배열형태로 담았다.
그리고 rate 실패율 순서로 정렬하고, map을 이용해서 단계를 배여롤 리턴했다.

나의 풀이

function solution(N, stages) {
    var answer = [];
    let clear = new Array(N+2).fill(0);
    let player = new Array(N+2).fill(0);
    let rate = []
    
    for (var i =0; i < stages.length ; i++) {
        if (stages[i] > N) {player[N+1]++}
        else {clear[stages[i]]++};
    }
    
    for (var j = N; j > 0 ; j--) {
        player[j] = clear[j] + player[j+1]
        rate.push([j, clear[j]/player[j]])
    }
    
    answer = rate.sort(function ([a,b], [c,d]) {return d-b||a-c})
                .map(item => item[0])
         
    return answer;
}

다른 풀이 방법 & 배운점

2차원배열일때, 요소배열의 값으로 정렬할 수도 있었다. 이 점은 파이썬보다 쉬운것 같다.
나랑 비슷하게 푼 사람들 중에는 0으로 채워진 빈 배열을 이용하지 않고, 트리형태로, 단계, 실패율, 도달율을 한 배열에 담는 방법이 있었는데 이방법이 데이터를 덜 차지해서 효율적이라고 생각한다.

좋은 웹페이지 즐겨찾기