본문 바로가기
PS(Problem Solving)/프로그래머스_Programmers

[프로그래머스] 2019 카카오 공채 - 실패율 (파이썬) 문제 및 풀이

by 초코칩프라푸치노 2021. 3. 4.

문제) 프로그래머스 - 2019 카카오 공채 - 실패율

-> 코딩테스트 연습 - 실패율 | 프로그래머스 (programmers.co.kr)

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

① 나의 풀이

관찰을 하다 보면 플레이어가 도달한 스테이지( j )와 해당 스테이지( i )를 비교하여 실패율을 계산하여 실패율과 해당 스테이지를 result 리스트에 넣어준다. 

 

 

플레이어가 도달한 스테이지가 해당 스테이지보다 높은 경우( j > i ):

플레이어는 스테이지에 도달했고 성공한 경우이므로 participant만 1을 늘린다.

 

플레이어가 도달한 스테이지가 해당 스테이지와 같은 경우( j > i ):

플레이어는 스테이지에 도달했지만 실패한 경우이므로 participant와 fail_count를 각각 1씩 늘린다.

 

해당 스테이지의 도달한 수가 0명일 경우( participant == 0 ):

participant가 0일 경우 실패율을 계산할 때 Zerodivisionerror가 발생한다. 이 예외는 try~except문을 이용해 처리한다. 문제에서 "스테이지에 도달한 유적 없는 경우 해당 스테이지 실패율은 0으로 정의한다"라고 했으므로 except문에서 result 리스트에 실패율을 0으로 추가한다.

 

 

마지막으로 실패율을 기준으로 내림차순 정렬하여 각 스테이지( i )를 answer 리스트에 추가한다.

 

일정 기준으로 정렬하기: 2021/02/27 - [Algorithm_note/Python] - [Python] sort(), sorted(), lambda

[Python] sort(), sorted(), lambda

⊙list.sort() 1. 따로 반환하는 값이 없으므로(None) 새로운 변수 선언이 필요 없다. 2. '리스트명.sort()'와 같은 방법으로 작성한다. 3. key parameter가 None으로 설정되어 있으므로, 문자열 리스트를 문자

chocochip101.tistory.com

 

 

 

소스 코드)

def solution(N, stages):
    result = []
    answer = []
    
    for i in range(1, N + 1):
        participant = 0
        fail_count = 0
        
        for j in stages:
        
            if j > i:
                participant += 1
                
            elif j == i:
                participant += 1
                fail_count += 1
        
        #participant = 0 일때의 처리
        try:
            result.append((fail_count/participant, i))
        except:
            result.append((0, i))
    
    #내림차순 정렬
    result.sort(key=lambda x: x[0], reverse=True)
    
    for i in result:
        answer.append(i[1])
        
    return answer

 

 

② 다른 사람 풀이

⊙ Simple is Best

 

def solution(N, stages):
    result = {}
    denominator = len(stages)
    for stage in range(1, N+1):
    
        if denominator != 0:
            count = stages.count(stage)
            result[stage] = count / denominator
            denominator -= count
            
        else:
            result[stage] = 0
            
    return sorted(result, key=lambda x : result[x], reverse=True)

 

내 풀이와 알고리즘은 같지만 아주 간단하게 해결하였다. 보기 좋은 떡이 먹기도 좋다고 코드가 간결할수록 눈으로 디버깅하기도 쉬워 오류를 빠르게 해결할 수 있다. 더 간단하게 최적화하도록 하자.

 

 

반응형

댓글