새소식

⌨️ Algorithms/프로그래머스

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

2022. 10. 17. 22:56

  • -

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

  • 제한사항
    • 실패율 = 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
    • 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return
    • stages에는 1 이상 N + 1 이하의 자연수가 담겨있음
      • 각 자연수는 사용자가 현재 도전 중인 스테이지의 번호를 나타냄
      • N + 1 은 마지막 스테이지(N 번째 스테이지) 까지 클리어 한 사용자를 나타냄
    • 만약 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 정렬
    • 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의
 
"""
입출력 예시)

N = 5, stages = [2, 1, 2, 6, 2, 4, 3, 3] -> [3,4,2,1,5]
N = 4, stages = [4,4,4,4,4] -> [4,1,2,3]
"""

def solution(N, stages):
    answer = {} 
    reached = len(stages)  # 스테이지에 도달한 플레이어 수

    for stage in range(1, N+1):
        if reached != 0:
            not_clear = stages.count(stage)   # 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
            answer[stage] = not_clear/reached # 각 스테이지당 실패율
            reached -= not_clear                 # 스테이지가 올라갈수록 남아있는 플레이어의 수는 줄어듦
        # N번째 스테이지까지 모두 클리어한 플레이어의 경우
        else:
            answer[stage] = 0 # 해당 스테이지의 실패율은 0 
    
    # value(실패율)을 기준으로 내림차순 정렬하고 key(stage)만 출력
    return sorted(answer, key=lambda x:answer[x], reverse=True)

-> 딕셔너리와 count() 이용

 

 

  • 리스트 요소 개수 구하기
    • len()
      • 리스트 전체의 요소 개수
      • len(list)
    • count()
      • 리스트의 특정 요소 개수
      • list.count('x')

 

 

 

처음엔 스테이지에 도달한 플레이어 수와 클리어하지 못한 플레이어의 수를 각각 리스트에 담아서

리스트끼리 연산으로 실패율을 구한 다음 튜플로 받아 정렬했는데 

이렇게 작성했더니 런타임 에러로 통과 못함

 

  • 처음에 작성했던 코드
  def solution(N, stages):
    answer = []
    reached = [] # 스테이지에 도달한 플레이어 수
    not_clear = [] # 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수

    for n in range(1, N+1):
      # n번째 스테이지일 때, stages가 n과 같거나 큰 플레이어 
      r = [s for s in stages if s >= n] 
      reached.append(len(r)) # 스테이지별 스테이지에 도달한 플레이어 수
      # n번째 스테이지일 때, stages가 n과 같은 플레이어
      nc = [s for s in stages if s == n] 
      not_clear.append(len(nc)) # 스테이지별 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수

    # 스테이지별 실패율
    fail_rate = [x/y for x,y in zip(not_clear, reached)]

    fr_tuple = []
    for fr in enumerate(fail_rate):
      fr_tuple.append(fr) # [(인덱스, 실패율)]
    fr_tuple.sort(key=lambda x:x[1], reverse=True) # 실패율이 높은 스테이지부터 내림차순 정렬
    answer = [x[0]+1 for x in fr_tuple] # 스테이지의 번호가 담겨있는 배열
    
    return answer

 

 

 

 

 

참고)

 

https://velog.io/@g0garden/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%9A%94%EC%86%8C%EC%9D%98-%EA%B0%9C%EC%88%98-%EA%B5%AC%ED%95%98%EA%B8%B0-len-count

 

[파이썬] 리스트 요소의 개수 구하기 (len, count)

1\. 파이썬 리스트의 요소 개수 구하기 → len() 사용1) input값으로 The Curious Case of Benjamin Button문장을 받아서 공백을 기준으로 나눠주면 s는 리스트로 변환된다.→ 'The', 'Curious', 'Case', 'of',

velog.io

 

https://velog.io/@norighthere/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Python-%EC%8B%A4%ED%8C%A8%EC%9C%A8

 

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

🧑🏻‍💻 [문제링크]다음 문제는 파이썬의 dictionary(딕셔너리)를 사용하면 참 쉬게 풀 수 있는 것 같다. 아래 실패율에 대한 공식을 생각해서 풀면 된다.실패율 = 아직 클리어하지 못한 플레이

velog.io

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!