programmers.co.kr/learn/courses/30/lessons/42889?language=python3
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
==풀이==
- 총 유저 수 구함(=스테이지 1에 도전한 유저 수)
- 반복문을 돌며 각 스테이지에 머물러있는 유저 수 구함
- 총 유저 수 - 현재 스테이지에 머무른 유저 수 = 다음 스테이지에 도전한 유저 수
- 실패율이 저장된 딕셔너리를 정렬하여 답 리턴
스테이지에 도전 한 유저 수를 계산하기 위해 총 유저 수를 구해준다.
맨 처음 스테이지에 도전한 유저수는 총 유저수랑 동일할 것이다.
그리고 그다음 스테이지에 도전한 유저수는 총 유저수에서 처음 스테이지에서 통과하지 못한 유저 수를 빼주면 된다.
스테이지 개수 N만큼(1~N)만큼 for문을 돌린다.
count()로 해당 스테이지에 머물러있는 유저 수를 구한다.
머물러있다는 건 해당 스테이지를 통과 못했다는 뜻이니 실패 수에 저장해준다.
스테이지에 도전 한 유저 수를 이용해 실패율을 구하고 딕셔너리에 저장한다.
그리고 다음 스테이지에 도전한 유저 수를 새로 업데이트해준다.
마지막에 정렬로 답을 리턴하면 끝이다.
==코드==
def solution(N, stages):
answer = []
failRateDict = {} # 스테이지:실패율
users = len(stages) # 총 유저 수
for i in range(1, N+1):
failCnt = stages.count(i) # 실패수
failRate = 0 # 실패율
if failCnt != 0: # 실패 수가 0이면 어차피 실패율도 0이라 계산 안함
failRate = failCnt/users
failRateDict[i] = failRate
users -= failCnt # 해당 스테이지에 머물러있는 사람은 다음 스테이지의 도전자수에서 빼줌
answer = sorted(failRateDict, key=lambda x: failRateDict[x], reverse=True) # 내림차순 정렬
return answer
* 딕셔너리 정렬 방법 :
dict = {0: 'chicken', 1: 'apple', 2: 'bear', 3: 'fire'}
a = sorted(dict.items(), key=lambda x: x[1], reverse=False)
b = sorted(dict, key=lambda x: dict[x], reverse=False)
print(a) #[(1, 'apple'), (2, 'bear'), (0, 'chicken'), (3, 'fire')]
print(b) #[1, 2, 0, 3]
reverse=True로 바꾸면 내림차순 정렬이 된다.
'알고리즘' 카테고리의 다른 글
[Python] 프로그래머스 : 큰 수 만들기(탐욕법) (0) | 2021.05.04 |
---|---|
[Python] 프로그래머스 코딩테스트 연습 : 프린터 (0) | 2021.04.30 |
[Python] 프로그래머스 시저암호 (0) | 2021.04.28 |
[Python] 2019카카오 겨울 인턴십 코딩 문제 : 인형뽑기 (0) | 2021.04.28 |
[Python] Project Euler 112 : Bouncy numbers (0) | 2021.04.23 |