본문 바로가기

알고리즘 문제

2018 카카오 블라인드 코딩 테스트 1차 실패율

런타임 에러가 좀 났었는데 나누는 값이 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