실패율

김현민·2021년 11월 11일
0

Algorithm

목록 보기
110/126
post-thumbnail

코드

function solution(N, stages) {
  // 스테이지 도달 선수가 없을 경우
  if (stages.length === 0) return [0]
  else {
    let answer = Array(N).fill(0)
    let res = []

    let idx = 1

    while (idx !== N + 1) {
      //분자
      let first = stages.filter((v) => v === idx).length

      //분모
      let second = stages.filter((v) => v >= idx).length

      let failRate = first / second
      
      // 0 / 0 의 연산이 있는 경우 NaN 예외 처리
      if (isNaN(failRate)) failRate = 0

      answer[idx - 1] = failRate

      idx++
    }

    while (res.length !== N) {
      let maxNum = Math.max(...answer)
      let indexMax = answer.indexOf(maxNum)
      answer[indexMax] = -1

      res.push(indexMax + 1)
    }
    if (res.length > 0) answer = []
    return res
  }
}

// solution(5, [2, 1, 2, 6, 2, 4, 3, 3])
// solution(4, [4, 4, 4, 4])
solution(5, [1, 2, 2, 1, 3])

각각 인덱스마다의 실패율을 구하고 가장 큰 값부터 차례대로 res배열에 담는다.

✓ 한번 70점이 나왔는데 이유는 중간에 0 / 0 연산예외처리를 하지 않아서였다.

profile
Jr. FE Dev

0개의 댓글