[TIL] 카테고리/알고리즘 문제풀기

[자바스크립트] 프로그래머스 Lv.1 실패율

티레이니 2022. 5. 27. 14:45

 

지문이 길다..! 손으로 끼적이며 풀어보다 잘못해석했다는걸 알고 중간에 다시했다 ㅋㅋㅋ

 

 

let answer = []
let rate = []

for (i=0; i<N; i++) { // 실패율 찾기
  let challenger = stages.filter((stage) => stage>=i+1)
  let unClear = challenger.filter((stage) => stage === i+1)

  if(challenger.length !== 0) {
    rate.push(unClear.length/challenger.length)
  } else {
    rate.push(0)
  }
}

while (answer.length < N) { // 답안에 내림차순으로 인덱스번호+1 넣기
  answer.push(rate.indexOf(Math.max(...rate))+1)
  rate[rate.indexOf(Math.max(...rate))] = -1
}

 

처음에 풀었던 코드. N번 반복문 돌려서, i+1 번째 스테이지 도전자를 필터돌려서 찾아내고,

도전자에서 필터돌려서 아직 못 깬 사람들을 찾아냈다.

아직 해당 스테이지에 도달한 사람이 없으면 0을 임시 배열인 rate에 push,

있으면 실패율을 계산(아직못깬사람/도달한사람)해서 push 해줬다.

 

그다음 while 문 돌려서 답안에 실패율 높은 순서대로 rate의 인덱스번호+1 넣어주었는데,

실패율이 같을 경우 자꾸 밀려버려서 이미 push한 값은 -1로 바꿔주었다.

 

 

 

↓↓↓ 다른 사람 답안 참고해서 (혹은 베껴서) 2트.

 

for (i=0; i<N; i++) { // 실패율
  let challenger = stages.filter((stage) => stage>=i+1)
  let unClear = challenger.filter((stage) => stage === i+1)

  if(challenger.length !== 0) {
    rate.push([i+1, unClear.length/challenger.length])
  } else {
    rate.push([i+1,0])
  }
}

rate.sort((a,b) => b[1]-a[1])
answer = rate.map((n) => n[0])

 

코드가 더 맘에 들어졌다.

아주 조금 더 빨라졌다.

그런데 일부 케이스에선 더 느리기도 하다.

...? 왤까. 테스트 케이스 알려줬으면

 

 

https://programmers.co.kr/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr