본문 바로가기

두두의 알고리즘/문제

[정렬] 프로그래머스 L1 '실패율' (Python)

728x90

<문제 링크>

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr


<문제 풀이>

  1. python 배열의 count() 함수를 이용하여 계산해야겠다고 생각
  2. 실패율을 기준으로 내림차순 정렬하되, 출력은 스테이지 번호를 출력하라 했으므로 dict() 사용
  3. 스테이지에 도달한 플레이어 수는 스테이지가 올라갈수록 그 전의 모든 플레이어 수가 없어지므로 total 변수 사용
  4. ZeroDivisonError를 대비하여 try/except 구문 처리

<코드>

#1차시도 실패. 1,6,7,9,13,23,24,25
def solution(N, stages):
    fail = {}
    for i in range(1,N+1):
        fail[i] = 0
    total = 0
    for i in range(N):
        total += stages.count(i)
        fail[i+1] = stages.count(i+1)/(len(stages)-total)
    result = dict(sorted(fail.items(), key=lambda x:-x[1]))
    return list(result.keys())

 

#성공
def solution(N, stages):
    fail = {}
    total = 0
    
    for i in range(1,N+1):
        fail[i] = 0
    
    for i in range(N):
        try:
            total += stages.count(i)
            fail[i+1] = stages.count(i+1)/(len(stages)-total)
        except:
            fail[i+1] = 0
            
    result = dict(sorted(fail.items(), key=lambda x:-x[1]))
    
    return list(result.keys())

 

#이취코 답
def solution(N, stages):
	answer = []
    length = len(stages)
   	
    for i in range(1,N+1):
    	count = stages.count(i)
        
        if length == 0:
        	fail = 0
        else:
        	fail = count / length
        
        answer.append((i,fail))
        length -= count
        
    answer = sorted(answer, key=lambda t:t[1], reverse=True)
    answer = [i[0] for i in answer]
    return answer

 

<고쳐야 할 점>

  • 예외 처리 종류 및 대처방법 공부하기