런타임 에러가 좀 났었는데 나누는 값이 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
'알고리즘 문제' 카테고리의 다른 글
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 |