코딩 테스트/프로그래머스 level1

실패율

fullfish 2022. 8. 11. 17:44

처음에는 객체를 생성해서 풀어나갔는데 마지막 내림차순부분에서 객체의 값을 비교하는것이

하자면 할 수 있겠지만 난잡해져서 배열로 다시 풀었다

 

코드

function solution(N, stages) {
  let result = [];
  let failLateArr = new Array(N).fill(0);
  let peopleLen = stages.length;

  stages = stages.sort();

  // 실패율 들어간 배열 만들기
  for (let i = 0; i < N; i++) {
    let count = 0;
    for (let j = 0; j < stages.length; j++) {
      if (stages[j] === i + 1) count++;
    }
    failLateArr[i] = peopleLen !== 0 ? count / peopleLen : 0;
    peopleLen -= count;
  }
  console.log(failLateArr);
  // 내림차순하기
  for (let i = 0; i < N; i++) {
    let min = -1;
    let index = -1;
    for (let j = 0; j < failLateArr.length; j++) {
      if (failLateArr[j] > min) {
        min = failLateArr[j];
        index = j;
      }
    }
    result.push(index + 1);
    failLateArr[index] = -1;
  }
  return result;
}

위 코드를 보면 알겠지만 몇몇 케이스가 통과가 되질 안았는데

그 이유는 분모를 남은 사람으로 나눴을 때 남은 사람이 0명인 경우 NaN이 나왔기 때문이다

그렇기 때문에 조건을 달아줬다

 

다른 사람의 더 좋은 코드

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. reach와 curr을 filter로 깔끔하게 함 

특히, reach를 나 처럼 남은 사람으로 둬서 NaN을 만들 가능성을 안두고 현 스테이지 이상의값만을 카운팅함

2. 배열을 객체처럼 씀 [ [1, 0,125], [2, 0.42] ] 처럼 2차원 배열로 만들되 안쪽 배열에서 0 부분에 스테이지 1 부분에 실패율을 넣었음 그래서 sort를 1번째 인덱스를 참조해서 함

'코딩 테스트 > 프로그래머스 level1' 카테고리의 다른 글

수박수박수박수박수박수?  (0) 2022.09.05
키패드 누르기  (0) 2022.08.11
완주하지 못한 선수  (0) 2022.08.08
소수 만들기  (0) 2022.08.06
음양 더하기  (0) 2022.08.06