실패율
문제 : https://programmers.co.kr/learn/courses/30/lessons/42889
코드
스테이지 번호를 key로 하여 모든 스테이지 번호를 갖는 dictionary를 생성하고 value는 0으로 초기화.
failure dictionary의 value를 각 스테이지의 도전중인 사용자 수로 업데이트.
failure dictionary를 스테이지 번호에 대해 오름차순으로 정렬.
failure dictionary의 value를 클리어하지 못한 사용자수 / 스테이지에 도전한 사용자 수 로 업데이트.
현재 스테이지에 도전한 사용자 수에서 현재 스테이지에 실패한 사용자수를 빼서 다음 스테이지에 도전할 사용자 수 업데이트.
마지막 스테이지에 도달한 경우 모든 스테이지를 클리어 했으므로 실패율을 표현하는 failure dictionary에서 key가 마지막 스테이지 N + 1 인 경우를 삭제.
failure dictionary를 value인 실패율이 높은 순인 내림차순으로 정렬.
실패율이 높은 순으로 정렬된 failure dictionary에서 스테이지 번호에 해당하는 key 값들을 list 형태로 return.
def solution(N, stages):
user_cnt = len(stages)
failure = {}
for i in range(1, N + 1):
failure[i] = 0
for i in stages:
if i in failure:
failure[i] += 1
failure = dict(sorted(failure.items()))
for k, v in failure.items():
if user_cnt != 0:
failure[k] = v / user_cnt
user_cnt -= v
if N + 1 in failure:
del failure[N + 1]
failure = dict(sorted(failure.items(), key=lambda x : x[1], reverse=True))
return list(failure.keys())
코드 실행
n = int(input())
stages = list(map(int, input().split()))
def solution(N, stages):
user_cnt = len(stages)
failure = {}
for i in range(1, N + 1):
failure[i] = 0
for i in stages:
if i in failure:
failure[i] += 1
failure = dict(sorted(failure.items()))
for k, v in failure.items():
if user_cnt != 0:
failure[k] = v / user_cnt
user_cnt -= v
if N + 1 in failure:
del failure[N + 1]
failure = dict(sorted(failure.items(), key=lambda x : x[1], reverse=True))
return list(failure.keys())
print(solution(n, stages))
'PS > programmers' 카테고리의 다른 글
[programmers] 프로그래머스 위클리 챌린지 : 피로도 (0) | 2021.12.21 |
---|---|
[programmers] 프로그래머스 위클리 챌린지 : 교점에 별 만들기 (0) | 2021.12.21 |
[programmers] 프로그래머스 위클리 챌린지 : 최소직사각형 (0) | 2021.12.21 |
[programmers] 2019 카카오 개발자 겨울 인턴십 : 크레인 인형 뽑기 게임 (0) | 2021.12.15 |
[programmers] 2021 KAKAO BLIND : 신규 아이디 추천 (0) | 2021.12.01 |
댓글