프로그래머스 실패율 코드 및 해설 (파이썬)
2021. 8. 4. 09:09ㆍalgorithm
반응형
https://programmers.co.kr/learn/courses/30/lessons/42889?language=python3
입력으로 받은 stages를 오름차순으로 정렬합니다. 이후 Counter를 이용해 각 스테이지별 빈도를 딕셔너리로 저장하고, 이 딕셔너리의 키를 하나씩 받으며 실패율을 계산합니다. 실패율은 (현재 키의 빈도수) / (지금까지 남아있는 사용자 수)입니다. 처음의 사용자 수는 stages의 길이로 초기화하고, 이후 사용자 수에서 현재 키의 빈도수만큼 계속 빼줍니다. 이후 1-N까지 중에 실패율이 계산되지 않은 스테이지 번호가 있다면 일괄적으로 0으로 처리합니다. 마지막으로 이렇게 구한 실패율을 내림차순으로, 실패율이 같다면 스테이지 번호가 낮은 순으로 정렬합니다.
from collections import Counter
def solution(N, stages):
# 사용자 명
players = len(stages)
failure = {}
# 오름차순 정렬
stages.sort()
counter = Counter(stages)
for stage in counter:
# 1-N
if stage in range(1,N+1):
# (현재 스테이지에 멈춰있는 사용자 수) / (현재 스테이지까지 올라온 사용자 수)
failure[stage] = counter[stage] / players
players -= counter[stage]
# 1-N 중 stages 값이 없으면 모두 0으로
for i in range(1,N+1):
if i not in failure:
failure[i] = 0
# 실패율이 높고, 스테이지 번호는 낮은 순으로 정렬
failure = dict(sorted(failure.items(), key=lambda item: (-item[1], item[0])))
return list(failure.keys())
반응형
'algorithm' 카테고리의 다른 글
모험가 길드 코드 및 해설 (파이썬) (0) | 2021.08.16 |
---|---|
백준 카드 정렬하기 코드 및 해설 (파이썬) (0) | 2021.08.12 |
백준 안테나 코드 및 해설 (파이썬) (0) | 2021.08.03 |
백준 국영수 코드 및 해설 (파이썬) (0) | 2021.08.02 |
정렬 (0) | 2021.08.02 |