알고리즘/프로그래머스 - JS

[프로그래머스-JS] level.1  실패율

개발자성장기 2022. 7. 14. 16:36
반응형

 

 

 

 

나의 코드 

 

function solution(N, stages) { 
    const 스테이지진행상황 = stages.reduce((acc, cur) => {
        
        acc[cur] = (acc[cur] || 0 )+ 1;
        return acc
    },{})
    
    let box = {}
    let 스테이지클리어못한수
    for(i=1; i<N + 1; i++){
        스테이지클리어못한수 = 스테이지진행상황[i]
        let 실패율 = 스테이지클리어못한수 / stages.length
        box[i] = 실패율 ? 실패율 : 0
        stages = stages.filter( x=> x != i)
    }

    let sortable = [];
    for (var name in box) {
      sortable.push([name, box[name]]);
    }

    sortable.sort(function(a, b) {
      return b[1] - a[1];
    });

    let answer = sortable.map(x => Number(x[0]))

    return answer;
}

 

제일 먼저 객체로 변환해서 스테이지마다 몇번을 실패했는지 구분해주었다

 

그런뒤 for문을 통해서 실패율을 계산해서 box객체에다가 각 스테이지 별로 실패율을 계산해서 넣어주었고

 

기 객체를 다시 배열로 변환하여  정렬을 해주었다. 

 

객체상태에서 정렬할려고 했는데 잘 안되어서 이렇게 했다. 

 

이 부분은 다시 공부해줘야 한다. 

 

 

조금 더 간결하게

 

function solution(N, stages) { 
    const 스테이지진행상황 = stages.reduce((acc, cur) => {
        
        acc[cur] = (acc[cur] || 0 )+ 1;
        return acc
    },{})
    
    let box = {}
    let 스테이지클리어못한수
    for(i=1; i<N + 1; i++){
        스테이지클리어못한수 = 스테이지진행상황[i]
        let 실패율 = 스테이지클리어못한수 / stages.length
        box[i] = 실패율 ? 실패율 : 0
        stages = stages.filter( x=> x != i)
    }
 
    const result = Object.entries(box).sort(([, a], [, b]) => b - a);
    
    return result.map(x=>Number(x[0]));
}

 

sort(( [, a], [, b]) => b - a) 이 부분은  sort((a,b) => b[1] - a[1]);  로 변경해도 된다.

 

다른 사람 코드 

 

function solution(N, stages) {
    let result = [];
    for(let i=1; i<=N; i++){
        let reach = stages.filter((x) => x >= i).length;
        let curr = stages.filter((x) => x === i).length;
        result.push([i, curr/reach]);
    }
    result.sort((a,b) => b[1] - a[1]);
    return result.map((x) => x[0]);
}

 

이중 for문을 해서 

아예 처음 부터 실패율을 구했다. 

 

그런뒤  배열의 두 번째 있는 요소를 내림차순으로 정렬을 해줬다. 

그런뒤 stage만 출력 하면서 정답이 도출 되었다. 

 

가독성도 좋고 코드가 바로바로 이해되어서 정말 잘 쓴 코드라 생각이 된다. 

 

 

반응형