320x100
https://school.programmers.co.kr/learn/courses/30/lessons/42889
두 개의 딕셔너리를 만든다.
- 1. users : 각 스테이지별 막힌 유저수를 기록
- 2. fail : 각 스테이지별로 계산한 실패율을 기록
users는 모든 스테이지를 통과한 경우 N+1라고 표기하는데, 실패율은 1~N까지만 계산하면 된다.
전체 유저수를 임시 변수값에 저장한 뒤, 1스테이지부터 실패 유저수 / 도달한 유저수를 계산하여 fail에 저장한다.
이후, 전체 유저수에서 실패 유저수를 빼면 다음 스테이지에 도달한 유저수를 계산할 수 있다.
도달한 유저수가 진작에 0이 되어 0/0을 계산하게 되면 에러가 난다.
그러므로 0일 경우에는 fail = 0으로 저장하는 조건을 추가한다.
그리고 fail 딕셔너리의 value 기준으로 내림차순 정렬을 하고, 맨 앞에서부터 key값을 answer.append한다.
def solution(N, stages):
answer = []
users = {k+1:0 for k in range(N+1)}
fail = {k+1:0 for k in range(N)}
total_users = len(stages)
for stage in stages: # 각 stage별 막힌 구간의 유저 수 저장
users[stage] += 1
user_count = total_users # 전체 유저수
for i in range(N):
if user_count != 0: ##### 도달한 유저가 있어야 하므로 조건 추가
fail[i+1] = (users[i+1]/user_count) # 해당 스테이지에서 막힌 유저 수 / 도달한 유저 수
else: fail[i+1] = 0 ##### 도달한 유저가 없으면 0/0 대신 확률 0으로 처리;
user_count -= users[i+1] # [i+1] 스테이지에 도달한 유저수
des = sorted(fail.items(),key = lambda x:x[1],reverse=True) # 실패율 기준으로 내림차순 정렬
for d in des:
answer.append(d[0])
return answer
'코딩테스트' 카테고리의 다른 글
[파이썬] 예상 대진표 - 2017 팁스타운 [CODING TEST #38] (0) | 2022.08.03 |
---|---|
[파이썬] 핸드폰 번호 가리기 [CODING TEST #37] (0) | 2022.08.03 |
[파이썬] 시저 암호 [CODING TEST #35] (0) | 2022.08.02 |
[파이썬] 3진법 뒤집기 - 월간 코드 챌린지 시즌1 [CODING TEST #34] (0) | 2022.08.02 |
[파이썬] 로또의 최고 순위와 최저 순위 - 2021 Dev-Matching: 웹 백엔드 개발자(상반기) [CODING TEST #33] (0) | 2022.08.02 |
댓글