2022-06-19 Lv1 실패율

정종훈·2022년 6월 19일
0

알고리즘 문제풀이

목록 보기
1/10
// 19:17 시작  19:58 1차 제출 20:06 분 통과

// 걸린시간 : 1시간

// 시간이 오래 걸린이유: [1, 3, 5, 4, 2]의 배열 중 큰수의 인덱스 부터 다시 나열하는 방식을 생각하는데 오래 걸림

/* 
사용한 전략:
1. filter 함수로 원소를 걸러내기

2. 배열의 원소 중 가장 큰 수의 인덱스를 다시 걸러내기
*/

/* 
느낀점: 우선 코드가 너무 지저 분 하다 . 또한 레벨 1 치고 너무 어렵게 문제르 풀었다.
항상 문제를 풀고 리팩토링을 어떻게 효율적으로 하는지 찾고 싶었는데
특히 이 문제는 코드를 조금 더 효율적으로 짜야할 것 같다. */


function solution(N, stages) {
  // stages 중 가장 많은 숫자순으로 리턴?
  // 1번 스테이지의 실패율은 어떻게 구할까?
  // 1번 스테이지 실패 수 / 1번 스테이지 도전 수
  // 1번 스테이지 실패 수는 어떻게 구할까? stages 배열 중 1의 개수
  // 1번 스테이지 도전 수는 어떻게 구할까? stages 배열 중 1이상의 개수

  // k번 스테이지 실패 수를 fail이라 선언, k번 스테이지 도전 수를 challenge라 선언
  let fail = 0;
  let challenge = 0;
  let result = [];
  let result2 = [];

  stages = stages.sort((a, b) => a - b);
  // console.log(stages);

  for (let i = 1; i <= N; i++) {
    // challenge의 개수는 stages의 배열 중 i이상의 개수를 filter 한다.
    challenge = stages.filter((el) => {
      return el >= i;
    }).length;
    // fail의 개수는 stages의 배열 중 i의 개수를 filter 한다.
    fail = stages.filter((el) => {
      return el === i;
    }).length;
    // console.log("28번쨰", fail, challenge);
    // result에 푸쉬 한다.
    if (challenge !== 0) {
      result.push(fail / challenge) 
    } else {
      result.push(0);
    }
  }
  console.log("33번쨰", result);

  let k = 0;
  while (k < result.length) {
    let max = result[0];
    let maxIdx = 0;
    for (let j = 0; j < result.length; j++) {
      if (result[j] > max) {
        max = result[j];
        maxIdx = j;
      }
    }
    // console.log(maxIdx)
    result[maxIdx] = -1;
    result2.push(maxIdx + 1);
    k += 1;
    // console.log(result)
  }
  // console.log(result2);
  return result2;
}

console.log(solution(3, [1, 1, 1]));
profile
괴발개발자에서 개발자로 향해보자

0개의 댓글