본문 바로가기
Coding Test/JavaScript

[Javascript] (프로그래머스 level 1) 실패율

by Chaedie 2022. 6. 30.
728x90

[Javascript] (프로그래머스 level 1) 실패율

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

function solution(N, stages) {
    // 1) 각 스테이지별로 실패한 사람의 수 카운트
    const failCount = [];
    for (let i = 1; i <= N; i++) {
        failCount[i] = stages.filter((stage) =>  i === stage).length;
    }

    // 2) 각 스테이지별로 실패율 계산 ([stage, 실패율])
    const failRate = [];
    for (let i = 1; i <= N; i++) {
        failRate[i] = [i, failCount[i] / stages.filter((stage) => stage >= i).length];
    }
    console.log(failRate);

    // 3) 실패율이 높은 순서로 인덱스 뽑기

    return failRate.sort((a, b) => b[1] - a[1]).map((el) => el[0]).filter((el) => el > 0);
}
  • 2시간 가까이 걸렸습니다. (직접 해결 못함)
  • 맵으로도 풀고 지지고 볶고 했는데, 배열과 내장함수로 간단하게 풀 수 있는 문제였네요. 풀이를 알고 나니 쉬운 문제였군요 😭

다른 사람 풀이

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]);
}
  • 로직이 거의 비슷한데 다른 사람 풀이가 훨씬 깔끔하네요.
    • 1) 콜백함수 내부의 변수는 x, y, a, b 이런식으로 놓는게 el 보다 훨씬 깔끔하네요. 함수형 프로그래밍 형식이라 진짜 함수식처럼 x = x[0] 이런게 이뻐보이는 것 같습니다.
    • 2) 복잡한 계산을 변수에 대입해서 식을 안보고도 한 눈에 알아 볼 수 있도록 만들었네요. 정말 잘 짠 코드인 것 같습니다.

배운 점, 느낀 점

  • 숫자를 카운트하거나, 인덱스를 적어두고 반환하고 싶을 때 거의 항상 HashMap을 사용했었는데, 2차원 배열로 간단하게 적을 수 있다는걸 오늘 처음 깨달았습니다.
  • 2차원 배열로 하면 좋은 점이 그냥 하던대로 배열.메서드().메서드().메서드();로 풀어 낼 수 있다는 장점이 있습니다. 허허허허 이렇게 또 하나 배워갑니다.. 정말 문제 좋네요.

댓글