
🚩 문제 설명
https://programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr

⏱️ 시간 복잡도
▪ 전체 스테이지의 수는 N개 이다.
▪ 전체 스테이지의 수 만큼 번호마다의 실패율을 확인한다.
▪ 따라서 대략적인 시간복잡도는 O(N)이라고 할 수 있다.
◾ 실패율 = 스테이지 아직 클리어하지 못한 플레이어의 수 / 스테이지 도달한 플레이어 수
◾ 각 스테이지의 실패율을 구해서 실패율이 높은 스테이지 순으로 배열에 담아 출력하는 문제
✅ 입출력
N : 총 스테이지의 갯수
stages : 플레이어가 남아있는 스테이지 배열
return ➡️ 실패율이 높은 순서로 스테이지 번호를 담은 배열 반환
N | stages | return |
5 | [2, 1, 2, 6, 2, 4, 3, 3] | [3,4,2,1,5] |
4 | [4,4,4,4,4] | [4,1,2,3] |
📑 문제 풀이
with 파이썬 (Python)

def solution(N, stages):
ans = []
fails = {} # 스테이지마다 실패율
players = len(stages) # 총 플레이중인 플레이어
completed = 0 # 스테이지 완수하지 못한 사람
for i in range(1, N+1):
if players - completed == 0:
fails[i] = 0
continue
fail = stages.count(i) / (players - completed)
completed += stages.count(i)
fails[i] = fail
for k, v in sorted(fails.items(), key = lambda item: item[1], reverse=True):
ans.append(k)
return ans
💬 Point
➡️ count() 를 활용하여 각 스테이지 번호마다 플레이어의 수를 센다.
➡️ sorted(fails.items, key = lambda item: item[1], reverse=True)
◾ 만약 players - complted == 0 이라면 continue를 해줘야한다.
- 그렇지 않으면 1번, 6번, 7번 문제 등에서 런타임 에러가 난다.
- 반례
- N = 5, stages = [2, 2, 2, 2, 2]
- 1이랑 2에서 끝나는데 그 뒤부터 0으로 나누기 때문에 런타임 에러가 난다.
◾ stages.count()를 해서 몇명의 플레이어가 아직 해당 스테이지에 남아있는지 구한다.
◾ 해당 스테이지보다 전의 스테이지를 끝내지 못한 사람들의 수를 빼준다.
- 필자는 이 값을 completed 라는 변수에 넣어놨는데 지금 생각해보니 변수명을 잘못 지정한 것 같음. 😅
- 그니까 players - completed가 되어야 완수한 사람이 되는 것이다.
◾ 키와 값으로 쌍으로 묶여 있는 fails 딕셔너리를 값을 기준으로 내림차순한다.
# 프로그래머스 실패율 파이썬
# 프로그래머스 실패율 런타임 에러
728x90
'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 프로그래머스' 카테고리의 다른 글
[PG12903] 가운데 글자 가져오기 (0) | 2021.11.29 |
---|---|
[PG72411] 메뉴 리뉴얼 (0) | 2021.11.29 |
[PG42586] 기능개발 (0) | 2021.11.23 |
[PG12901] 2016년 (0) | 2021.11.23 |
[PG42888] 오픈채팅방 (0) | 2021.11.21 |