- 문제
- 나의 풀이
def solution(N, stages):
stage = {}
for i in range(1,N+1):
stage[i] = stages.count(i)
cnt = {}
for i in range(1,N+1):
if i == 1:
cnt[i] = stage[i]/len(stages)
if i != 1:
sum = 0
for j in range(1,i):
sum += stage[j]
if len(stages)-sum <= 0:
cnt[i] = 0
else:
cnt[i] = stage[i]/(len(stages)-sum)
new_cnt = sorted(cnt.items(), key = lambda x : x[1], reverse = True)
answer = []
for i in range(len(new_cnt)):
answer.append(new_cnt[i][0])
return answer
- 풀이 해석
먼저 stage라는 딕셔너리 안에 각 스테이지의 실패자가 몇명인지를 넣어주었다.
그리고 스테이지별 실패율을 담을 빈 딕셔너리 cnt를 선언하고, for문으로 각 스테이지와 실패율을 매칭시켰다.
우선 스테이지1은 이전단계가 없기 때문에 분모가 len(stages)가 되어서 if문으로 따로 조건을 걸어주었다.
다음단계부터는 *실패율 = 각 스테이지에 머물러있는 사람/(전체 인원 - 전 스테이지를 통과하지 못한 사람) 이 된다.
그래서 딕셔너리 cnt에 스테이지와 실패율을 각각 매칭시켜준다.
하지만 이때, len(stages)-sum이 음수가 되면 식이 성립하지 못하기 때문에, 실패율의 분모가 양수일때와 음수일때를 조건문으로 나누어서 코드를 짜주면 된다.
다음으로, 각 스테이지와 실패율 매칭이 완료된 딕셔너리 cnt를 lamda함수를 사용하여 실패율을 기준으로 내림차순정렬한 뒤,
정렬된 cnt의 key값만 빈 리스트인 answer에 넣어주고 answer을 return하였다.
- 링크
https://programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 위클리 챌린지 4주차 (파이썬) python (1) | 2021.09.06 |
---|---|
[프로그래머스] 체육복 (파이썬) python (0) | 2021.09.05 |
[프로그래머스] 숫자 문자열과 영단어 (파이썬) python (0) | 2021.08.31 |