https://programmers.co.kr/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr


풀이 과정

도달했으나 아직 미클리어 / 도달한 플레이어 수로 표현되는 실패율을 구하고, 각 스테이지를 실패율의 내림차순 순서대로 반환하되 실패율이 같으면 앞의 스테이지가 우선적으로 오게 해달라는 문제이다.

 

스테이지에 도착한 플레이어 수를 표현하는 arrive 리스트, 도착했으나 클리어를 하지 못한 수를 표현하는 non_clear 리스트를 선언하고, stages 리스트를 살펴보며 값을 변경해주었다. stage에 3이 들어왔다면 arrive 0 ~ 2가 1씩 늘어나고 non_clear[2]가 1이 늘어날 것이다.

 

그 후 temp에 [인덱스, 실패율]을 저장한 뒤 temp.sort(key=lambda x:x[1], reverse=True)로 실패율 내림차순으로 정렬해준 뒤 answer에 index만 넣어주어 문제를 해결하였다.

 

리스트 내부의 값을 전부 다 1씩 증가시키는 코드를 짤 때

 

for i in list:

    i += 1 (x)

 

for i in range(len(list)):

    list[i] += 1 (o)

 

임에 유의해야 한다. 위의 코드에서는 리스트에 아무런 변화가 없다.


소스 코드

def solution(N, stages):
    non_clear = [0 for _ in range(N)]
    arrive = [0 for _ in range(N)]

    for stage in stages:
        if stage == N+1:
            for number in range(N):
                arrive[number] += 1
            continue
        for number in range(stage):
            arrive[number] += 1
        non_clear[stage-1] += 1

    temp = []
    answer = []
    for number in range(N):
        if arrive[number] == 0:
            temp.append([number + 1, 0])
            continue
        temp.append([number + 1, non_clear[number] / arrive[number]])

    temp.sort(key=lambda x:x[1], reverse=True)

    for item in temp:
        answer.append(item[0])

    return answer

+ Recent posts