[프로그래머스] 실패율

개발잘하기프로젝트·2020년 11월 1일
0
post-thumbnail

🤔 문제

2019 KAKAO BLIND RECRUITMENT

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

이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다.

  1. 실패율:
    스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어의 수
  2. 전체스테이지 N, 게임을 이용하는 사용자가 멈춰있는 스테이지의 번호가 담긴 배열 stages
  3. stages에는 1 ~ N + 1의 자연수가 담겨있다
  4. 실패율이 높은 스테이지부터 내림차순으로 리턴
  5. 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0

실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라.

💡 접근

  1. 스테이지에 맞게 for문을 작성한다.
  2. 실패율을 구하기 위해 스테이지에 도달한 플레이어 수와 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수를 구한다.
  3. 실패율만으로 sort할 경우 어떤 스테이지가 앞서서 정렬되는지 알 수 없으므로, 객체 형태로 실패율을 모아둔 배열을 만든다.
  4. 실패율을 모아둔 배열에서 실패율이 높은 순서대로 정렬한 뒤 정렬된 배열에서 stage만 리턴한다.

🧑🏻‍💻 코드

처음엔 접근3 과정에서 많이 막혔다. 배열의 index만 뽑아낼 생각도 해보았고, 그걸 다시 새로운 배열에 담아 정렬하는 방법도 생각해보았는데, 무언가 잘못된 것 같아서 객체를 활용해야겠다고 고민하던 중에 투두리스트 만들때 todos 배열의 구조가 생각이 났다. 이 방법을 적용해보니 쉽게 해결할 수 있었다.

let failure = [
  {stage: 1, failureRate: 0.1},
  {stage: 2, failureRate: 0.5},
  ... ,
  {stage: N, failureRate}
];

📝 참고

MDN - Array.prototype.filter()
MDN - Array.prototype.sort()

profile
🏠 ☕️ 🎞 🌿 + 🧑🏻‍💻

0개의 댓글