새벽_나그네
12시 지난 새벽
새벽_나그네
전체 방문자
오늘
어제
  • 분류 전체보기
    • TIL
    • DevLog
    • Algorithm
    • ComputerScience
    • etc

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • portfolio
  • 스파르타코딩클럽
  • til
  • 내일배움단
  • 코린이
  • 내일배움카드
  • 코딩프로젝트
  • docker
  • 코딩
  • AI트랙
  • machine learning
  • 국비지원
  • 자기주도학습
  • Selenium 4
  • TodayILearned
  • Github
  • Python
  • 프로그래머스
  • 내일배움캠프
  • 개발일지

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
새벽_나그네

12시 지난 새벽

[프로그래머스] 실패율
Algorithm

[프로그래머스] 실패율

2022. 8. 17. 15:37

문제

문제 설명

실패율

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

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

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

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

 

입력 & 출력

입출력 예

Nstagesresult

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. 문제에 나와있는 제약조건에 맞게 식을 구성해봅니다. 여기서 집중해야 할 변수는 두 가지입니다. 하나는 분모가 될 유저 토털이고 두 번째는 실패율입니다.

2. 실패율의 계산은 해당 스테이지에 있는 유저의숫자 / 총 도달한 유저의 숫자로 계산이 됩니다.

3. 2번을 수행하기 위하여 user_total이라는 변수를 사용하지만 여기서 이전 스테이지에서 사용된 사람의 숫자는 for문이 돌 때마다 빼주면서 다음 스테이지에 대한 실패율을 구하게 됩니다.

4. 이렇게 실해율을 구할 때 분모 값으로 user_total이 0인 값이 들어가면 에러가 생기게 되므로 예외 처리를 해주고 else문으로 실패율을 얻어내도록 하며 i 값을 이용해서 스테이지별 실패율을 저장하도록 합니다. 

5. 4번에서 중요한 포인트는 count 값을 실수형 형변환을 해줘야 하는 것입니다. 만약에 이 부분을 생략하게 된다면 정수형 계산이 되어서 잘못된 값을 얻게 될 수 있으며 이렇게 되었을 때 count에 무수히 큰 수를 곱하여서 억지로 답으로 만들 수는 있지만 잘못된 방법입니다.

6. 4,5번에 있는 내용대로 스테이지별 실패율이 저장되게 구성해놓고 x[1] 번째 곧 실패율을 이용해서 정렬한 후 이것 중에 [0] 번째 값만 다시 answer 값으로 넣어주면서 리턴하여 줍니다.

 

코드

def solution(N, stages):
    answer = []
    user_total = len(stages)
    fail_rate = 0
    for i in range(1, N + 1):
        count = stages.count(i)
        if user_total == 0:
            fail_rate = 0
        else:
            fail_rate = float(count) / user_total

        user_total -= count
        answer.append((i, fail_rate))

    print(answer)
    answer = sorted(answer, key=lambda x: x[1], reverse=True)
    answer = [i[0] for i in answer]

    return answer
저작자표시 비영리 변경금지 (새창열림)

'Algorithm' 카테고리의 다른 글

[프로그래머스] 문자열 내 p와 y의 개수  (0) 2022.08.17
[프로그래머스] [1차] 다트 게임  (0) 2022.08.17
[프로그래머스] 문자열 내 마음대로 정렬하기  (0) 2022.08.16
[프로그래머스] 자릿수 더하기  (0) 2022.08.15
[프로그래머스] 두 정수 사이의 합  (0) 2022.08.15
    'Algorithm' 카테고리의 다른 글
    • [프로그래머스] 문자열 내 p와 y의 개수
    • [프로그래머스] [1차] 다트 게임
    • [프로그래머스] 문자열 내 마음대로 정렬하기
    • [프로그래머스] 자릿수 더하기
    새벽_나그네
    새벽_나그네
    IT, 프로그래밍, 정보, 스마트스토어

    티스토리툴바