[Programmers]실패율

이묘·2022년 7월 18일
0

CodingTest

목록 보기
5/41
post-thumbnail

프로그래머스 코딩테스트 연습 level1 '실패율'

  • sort()로 정렬하기
  • map()사용해서 원하는 배열 리턴하기
  • filter()
  • splice()




소스코드

function solution(N, stages) {
    var answer = [];

    stages.sort(function(a,b) { return a-b})

    for (var i = 1; i <= N; i++) {
   
        // 1을 찾아서
        icount = stages.filter(state => state === i);
        
        // 실패율
        fail = (icount.length/stages.length);

        answer.push([i, fail])

        // 들어갔던건 빼줌
        stages.splice(0, icount.length)
        
        // 내림차순 정렬(실패율에 따라)
        answer.sort(function(a, b) { return b[1]-a[1]} )
    }

        //answer 2차원 배열에서 0번째만
    return answer.map(arr => arr[0]);
}

result = solution(4,		[4,4,4,4,4]);
console.log(result);




코드리뷰

더 간단명료하게 적으신 분들도 많지만 이게 내 최선이었다...ㅋ큐ㅠㅠ
다른분들은 문제까지 도달한 사람을 따로 계산을 해서 뽑아냈지만 나는 기존에 있는 배열 원본에서 잘라내는 형식을 사용했다.(원래는 이러면 안되지만)

  1. stages 배열 오름차순 정렬
  2. N만큼 for문을 돌리고 i를 찾는다.
  3. i의 갯수를 기반으로 실패율을 구한다.
  4. answer에 몇번째인지와 실패율을 같이 push한다.
  5. 들어갔던 i의 갯수를 stages에서 빼준다.
  6. answer을 실패율에 따라 내림차순 정렬해준다.
  7. answer에서 정렬된 i들만 뽑아와준다.

대략 흐름은 이렇게 된다.

4번

 answer.push([i, fail])

이게 4번 내용인데, 처음에 실패율 값을 다 구해놓고 이걸어떻게 정렬을 시키며 i들로 다시 어떻게 바꾸나 고민을 되게 많이 했다.
이런식으로 넣으면 나중에 answer에는

[ [1, 1의실패율],[2, 2의실패율], [3, 3의 실패율 ] ... ]

이런식으로 나오게 된다.
이 때 내림차순 정렬은 2차원 배열의 1번째를 기준으로 내림차순 정렬을 해주고 나중에 map하ㅏㅁ수를 이용해서 0번째에 있는 숫자들만 뽑아와주었다.

profile
본질을 공부해야 응용도 하지 않을까

0개의 댓글