티스토리 뷰

반응형

 문제

 

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

 문제 상황

 

- 스테이지에 도달한 사람과 통과한 사람수를 계산해서 정렬한다. 

 

 

 

 해결 전략

- 레벨을 기준으로 순회하며 stages에서 통과한 사람과 도달한 사람으로 구분하여 카운팅한다.

 

- 실패율을 인덱스와 함께 튜플로 선언해 다시 리스트로 만든 뒤, 내용물을 기준으로 정렬하고 마지막에 순서대로 인덱스를 담는다. 단, 0번째의 경우 실패율에 존재하지만 실제로는 1부터 N까지만 있기 때문에 0을 결과에서 빼준다.

 

 

 

 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def solution(N, stages):
    fail_ratio = [0]*(N+1)
    for lv in range(1, N+1):
        # 레벨에 도달한 사람 수, 레벨을 통과한 사람 수
        reached, passed = 00
        for stage in stages:
            if stage > lv :
                passed += 1
            if stage == lv:
                reached += 1    
        fail_ratio[lv] = (reached/(reached+passed)) if reached+passed != 0 else 0
    fail_ratio = sorted(list(enumerate(fail_ratio)), key=lambda x:x[1], reverse=True)
    result = []
    for i in range(len(fail_ratio)):
        if fail_ratio[i][0!= 0:
            result.append(fail_ratio[i][0])
    return result
cs

 

 

 해설

 

- for문 안에 for문이 있어 N^2이지만 실제로 N값의 범위가 크지않아 속도에 큰 무리가 없다.

 

 

 

 새로 학습한 것 & 실수 

 

- .

 

 

출처 - programmers.co.kr/learn/courses/30/lessons/42889
반응형
댓글