정현수
현수 세상
정현수
전체 방문자
오늘
어제
반응형
  • 분류 전체보기 (267)
    • NEXTSTEP 자바스크립트 클린코드 2기 (1)
    • 우테코 4기 (6)
    • 회고록 (5)
    • 개발지식 (6)
    • React (3)
      • React Clone Coding (3)
    • React Native (2)
    • Kubernetes & Docker (36)
      • 궁금한 것 (13)
    • Flutter (2)
    • 알고리즘 (168)
      • 프로그래머스 1단계 (27)
      • 프로그래머스 2단계 (37)
      • 백준 (98)
      • 이론 (6)
    • 자료구조 (3)
    • 유튜브 (1)
    • 책 읽자 (1)
    • 취업준비 (1)
    • 대내 활동 (31)
      • 2022년 겨울방학 알고리즘 특강 (0)
      • 2020년 여름방학 모각코 (13)
      • 2020년 겨울방학 모각코 (13)
      • 웹프로그래밍 상상튜터링 (5)

인기 글

최근 글

공지사항

  • 블로그 이동

태그

  • kubelet
  • replicaset
  • React
  • 그리디
  • 이코테
  • flutter
  • 공식문서
  • 노드
  • 파이썬
  • Kubernetes
  • docker
  • Deployment
  • programmers
  • 개발지식
  • mysql
  • 알고리즘
  • 디플로이먼트
  • javascript
  • 모각코
  • 백준
  • 자바스크립트
  • 레플리카셋
  • Jenkins
  • 프로그래머스
  • NodePort
  • 리액트
  • 쿠버네티스
  • 우테코
  • image run
  • image pull

최근 댓글

블로그 메뉴

  • 홈

티스토리

hELLO · Designed By 정상우.
정현수

현수 세상

[프로그래머스 LV1] 실패율 문제 풀이 (Javascript)
알고리즘/프로그래머스 1단계

[프로그래머스 LV1] 실패율 문제 풀이 (Javascript)

2021. 7. 9. 15:18
반응형

문제 설명

실패율

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

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

  • 실패율은 다음과 같이 정의한다.
    • 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수

전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라.

제한사항

  • 스테이지의 개수 N은 1 이상 500 이하의 자연수이다.
  • stages의 길이는 1 이상 200,000 이하이다.
  • stages에는 1 이상 N + 1 이하의 자연수가 담겨있다.
    • 각 자연수는 사용자가 현재 도전 중인 스테이지의 번호를 나타낸다.
    • 단, N + 1 은 마지막 스테이지(N 번째 스테이지) 까지 클리어 한 사용자를 나타낸다.
  • 만약 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 하면 된다.
  • 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.

입출력 예

N stages result
5 [2, 1, 2, 6, 2, 4, 3, 3] [3,4,2,1,5]
4 [4,4,4,4,4] [4,1,2,3]

입출력 예 설명

입출력 예 #1
1번 스테이지에는 총 8명의 사용자가 도전했으며, 이 중 1명의 사용자가 아직 클리어하지 못했다. 따라서 1번 스테이지의 실패율은 다음과 같다.

  • 1 번 스테이지 실패율 : 1/8

2번 스테이지에는 총 7명의 사용자가 도전했으며, 이 중 3명의 사용자가 아직 클리어하지 못했다. 따라서 2번 스테이지의 실패율은 다음과 같다.

  • 2 번 스테이지 실패율 : 3/7

마찬가지로 나머지 스테이지의 실패율은 다음과 같다.

  • 3 번 스테이지 실패율 : 2/4
  • 4번 스테이지 실패율 : 1/2
  • 5번 스테이지 실패율 : 0/1

각 스테이지의 번호를 실패율의 내림차순으로 정렬하면 다음과 같다.

  • [3,4,2,1,5]

입출력 예 #2

모든 사용자가 마지막 스테이지에 있으므로 4번 스테이지의 실패율은 1이며 나머지 스테이지의 실패율은 0이다.

  • [4,1,2,3]

정답 풀이

function solution(N, stages) {
    let answer = [];
    
    for (let i = 0; i < N; i++) {
        const stage = i + 1;
        const reachUser = stages.reduce((sum, val) => sum + ((val >= stage) ? 1 : 0), 0);
        const failUser  = stages.reduce((sum, val) => sum + ((val == stage) ? 1 : 0), 0);  
        answer.push({stage, fail: failUser / reachUser});
    }
    
    answer.sort((a, b) => {
        if (a.fail > b.fail) return -1;
        else if (a.fail < b.fail) return 1;
        return a.stage - b.stage;
    });
    
    return answer.map(obj => obj.stage);
}

reduce와 sort 그리고 dictionary 자료구조를 잘 사용한 풀이였다.

for문을 계속 사용하면서 풀었는데, 위의 코드가 훨씬 깔끔하긴 하지만 효율성이 떨어진다.

다행히 문제에 효율 점수는 없어서 통과를 했지만, 효율을 향상 시킬 수 있는 방법도 생각해봐야겠다.

반응형

'알고리즘 > 프로그래머스 1단계' 카테고리의 다른 글

[프로그래머스 LV1] 예산 문제 풀이 (Javascript)  (0) 2021.07.10
[프로그래머스 LV1] 약수의 개수와 덧셈 문제 풀이 (Javascript)  (0) 2021.07.10
[프로그래머스 LV1] 3진법 뒤집기 문제 풀이 (Javascript)  (0) 2021.07.09
[프로그래머스 LV1] 두 개 뽑아서 더하기 문제 풀이 (Javascript)  (0) 2021.07.08
[프로그래머스 LV1] 2016년 문제 풀이 (Javascript)  (0) 2021.07.08
    정현수
    정현수
    깃허브 : https://github.com/junghyeonsu 개인 블로그 : https://junghyeonsu.com/ (양질의 글을 올리려고 항상 노력합니다.)

    티스토리툴바