📝 문제 요약
> 실패율을 구하는 코드를 완성하라.
( 실패율 = 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 )
전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라.
https://programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
🎨 풀이
💡 첫 번째 시도 = 성공 코드
def solution(N, stages):
answer = []
clear_user = len(stages)
fail_dict = {}
for num in range(1,N+1): # 실패율 계산
stage_count = stages.count(num)
fail = 0
if stage_count != 0:
fail = stage_count/clear_user
fail_dict[num] = fail
clear_user -= stage_count
answer = sorted(fail_dict, key=lambda x: fail_dict[x], reverse=True)
return answer
> 핵심 => clear_user -= stage_count 부분 & 실패율 딕셔너리에 넣어서 내림차순으로 반환하는 데 이용.
* 변수 설명
- clear_user : 통과한 유저 수 (for문을 돌면서 점점 줄어들 예정)
- fail_dict : 실패율 내림차순을 원활하게 하기 위한 딕셔너리
- stage_count : 해당 단계 실패한 사람 수
- fail : 실패율
1. clear_user에 len(stages)를 넣는다. (= 전체 사용자 수)
2. 1 ~ N 단계까지 for 문을 돌린다.
2-1. stage_count에 해당 단계를 실패한 사람 수를 count해서 넣어준다.
- stages가 각 사용자의 실패 단계를 다 적어둔 거니까 그대로 count 해주면 된다.
ex) stages.count(1) = 1단계를 실패한 사람 수
2-2. stage_count가 0이 아니라면, 실패율을 계산해준다. (실패율 = 못 깬 유저 / 클리어 한 유저)
- 만약 stage_count가 0이라면 fail 초기값인 0을 그대로 적용한다. (이 단계에서 막힌 사람이 없는 경우)
2-3. fail_dict[num]에 fail 값을 넣어준다.
3. fail_dict[x], 즉 안에 들어가있는 실패율을 기준으로 내림차순 정렬한 후 return 한다.

끝~
⭐ 느낀점
> 카카오는 카카오다. 그래도 해볼만한 카카오라서 좀 신기했다. LEVEL 1이 이렇게 빡셀 일이냐구. ㅠㅠ. 그리고 자격증 시험 밤 새서 보고난 직후라 그런지 정신이 말짱하지 않다. 글을 열심히 쓴다고 썼는데 횡설수설한거 아닌가 모르겠다. 놓친 거 있나 보려고 계속 검토했는데,, 지금 보면 모르겠다. 그리고 이해가 되게 글을 쓰고 싶었는데 그렇게 잘 된건지도 모르겠다. 나중에 자고 일어나서 다시 한 번 봐야겠다. 이 문제 못 풀 줄 알았는데 푼 거 넘 신기하고, 그리고 변수명이 좀 더 직관적이어야 될 거 같기도 하고. 여튼 그렇다. 하하. 고생했당 ^0^
'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Level 1] 문자열을 정수로 바꾸기 (파이썬) (0) | 2022.05.09 |
---|---|
[프로그래머스 / Level 1] 짝수와 홀수 (파이썬) (0) | 2022.05.08 |
[프로그래머스 / Level 1] 자릿수 더하기 (파이썬) (0) | 2022.05.06 |
[프로그래머스 / Level 1] 문자열 다루기 기본 (파이썬) (0) | 2022.05.05 |
[프로그래머스 / Level 2] 전화번호 목록 (파이썬) (0) | 2022.05.04 |