[Programmers](Level1) 실패율

주형(Jureamer)·2022년 4월 12일
0

문제명: 실패율

문제설명:

슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다.
원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다.
이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. (... 생략)

문제풀이

각 스테이지에 대한 실패율 내림차순 정렬해야하는데 해당 부분을 퀵소트, 병합 정렬 등을 통해 수정 해 볼 예정

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

  let probability = new Array(N+1).fill(0);
  for(let i = 1; i <= N; i++) {
      let failure = 0;
      let challenger = 0;

      for(let j = 0; j < stages.length; j++) {
          // 스테이지 숫자와 같거나 높은 사람은 'challenger'
          if(i <= stages[j]) {
              challenger++
              // 스테이지 숫자와 같은 사람은 'failure'
              if(i === stages[j]) {
                  failure++         
              }
          }
      }
      // 실패율 예외 처리
      if(challenger === 0 || failure === 0 ) probability[i] = 0;
      else probability[i] = failure / challenger     
  }
  // 반복을 위한 count 선언
  let count = 0;
  // 확률순 정렬
  while(count < probability.length) {
    let max = -1;
    let idx = 0;
    for(let i = 1; i < probability.length; i++) {
      if(probability[i] > max) {
        max = probability[i]
        idx = i
      }
    }
    // 정답에 실패확률이 큰 값부터 push
    answer.push(idx);
    // 기존 값은 사용(-1) 처리
    probability[idx] = -1;
    // 반복값 ++
    count++
  }
  // index 정리 (마지막 값 삭제)
  return answer.slice(0, answer.length-1)
}

// test case 1 => [3,4,2,1,5]
console.log(solution(5,[2, 1, 2, 6, 2, 4, 3, 3]))

// test case 2 => [4,1,2,3]
console.log(solution(4,[4,4,4,4,4]))

// test case 2 => [3, 2, 1, 4]
console.log(solution(4, [1, 2, 3, 2, 1]))
profile
작게라도 꾸준히 성장하는게 목표입니다.

0개의 댓글