Algorithm/프로그래머스

[프로그래머스/Python] 실패율

poppy 2021. 5. 8. 13:06
반응형

programmers.co.kr/learn/courses/30/lessons/42889?language=python3

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

def solution(N, stages):
    answer = []
    result = []
    length = len(stages)
    
    for i in range(1,N+1):
        not_finish = stages.count(i)
        fail = not_finish / length
        
        result.append((i, fail))
        length -= not_finish
    
    result.sort(key = lambda x: x[1], reverse = True)
    
    for r in result: 
        answer.append(r[0])
    
    return answer

처음에는 이렇게 코드를 작성했더니 런타임 에러가 발생했습니다 코드는 다 맞는거 같은데 왜 오류가 나는지 찾아보니 length 가 0일 경우일 때 에러가 발생한다는 것을 알았습니다. length가 0일 경우에 처리해주는 로직을 추가한 후 코드를 완성했고 테스트에 통과하였습니다!

 

def solution(N, stages):
    answer = []
    result = []
    length = len(stages) # 스테이지에 도달한 플레이어
    
    # 스테이지를 돌면서 실패율 계산
    for i in range(1,N+1):
        not_finish = stages.count(i) # 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
        
        if length == 0: fail = 0
        else: fail = not_finish / length
            
        result.append((i, fail))
        length -= not_finish
    
    # 실패율 기준으로 내림차순 정렬
    result.sort(key = lambda x: x[1], reverse = True)
    
    # 스테이지 값만 따로 뽑기
    for r in result: 
        answer.append(r[0])
    
    return answer

먼저 length는 스테이지에 도달한 플레이어를 의미하는데 첫번째 스테이지는 모든 플레이어가 도달하므로 플레이어 수 값을 length에 저장합니다. 그 다음 스테이지를 돌면서 실패율을 계산합니다. not_finish는 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수를 의미하므로 i번째 스테이지에 머물러 있는 플레이어의 수를 파악하면 됩니다.  stages.count(i) 를 하면 stages의 배열에서 i의 개수가 몇 개인지 파악할 수 있습니다. length가 0일 경우에는 실패율(fail)을 0으로 처리해주고 그렇지 않은 경우에는 실패율을 문제에 제시된대로 계산해줍니다. 계산이 끝나면 result에 스테이지 번호와 해당 스테이지 실패율을 튜플로 저장해줍니다. 마지막으로 다음 스테이지에 도달한 플레이어의 수를 계산합니다.

 

모든 스테이지의 실패율 계산이 끝났다면 실패율 기준으로 내림차순 정렬을 해준 뒤 스테이지 값만 뽑아서 answer에 저장해줍니다. answer를 리턴해주면 끝입니다!

 

- 배운 점 -

listdata = [2,2,1,3,8,5,7,6,3,6,2,3,9,4,4]
c1 = listdata.count(2)
c2 = listdata.count(7)
print(c1)
print(c2)

위의 예시처럼 리스트에서 특정 요소 개수를 구할 때 리스트명.count(특정 요소) 를 사용하면 됩니다.

반응형