런타임 에러가 좀 났었는데 나누는 값이 0인 경우 처리를 안해줘서 났다.
1부터 N까지의 stage 번호를 level(단계)로 표현하고 각 level마다 stages를 돌면서 유저가 있는 stage가 level보다 크거나 같다면 스테이지에 도달한 유저인 arriver를 1증가시키고, level과 유저가 있는 stage가 같다면 아직 클리어 못했으므로 not_clear를 1 증가시킨다. 나누는 값인 arriver가 0인 경우 level에 대한 실패율은 0으로 처리한다. 도착한 사람이 있는 경우엔 실패율을 구한다. fail_ratio는 각 스테이지를 key로 실패율을 value로 저장한다. 주어진 스테이지를 모두 돌았다면 dict의 value를 기준으로 내림차순 정렬한다. (1차로 value를 기준으로 정렬한 뒤 value가 같은 게 나오면 2차로 key를 기준으로 오름차순 정렬해야하나 했는데 value로 정렬하면 key는 어차피 순서대로 있어서 원하는대로 나오는 것 같다...)
def solution(N, stages):
fail_ratio = {}
for level in range(1, N+1):
arriver = 0
not_cleear = 0
for stage in stages:
if level <= stage:
arriver += 1
if level == stage:
not_cleear += 1
if arriver == 0:
fail_ratio[level] = 0
else:
fail_ratio[level] = not_cleear / arriver
answer = sorted(fail_ratio, key=lambda a: fail_ratio[a], reverse=True)
return answer
출처 https://www.welcomekakao.com/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율 | 프로그래머스
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를
www.welcomekakao.com
'알고리즘 문제' 카테고리의 다른 글
2018 카카오 블라인드 코딩 테스트 1차 길 찾기 게임 (0) | 2019.09.07 |
---|---|
2018 카카오 블라인드 코딩 테스트 1차 무지의 먹방 라이브 (0) | 2019.09.06 |
2018 카카오 블라인드 코딩 테스트 1차 오픈채팅방 (0) | 2019.09.04 |
프로그래머스 단어 변환 (0) | 2019.09.03 |
프로그래머스 네트워크 (0) | 2019.09.02 |