티스토리 뷰

반응형

🚀  들어가며...

  • '레벨 1'의 문제입니다.
  • 알고리즘을 풀면서 항상 느끼는 것이지만, 문제를 잘 읽어야 하는것 같습니다.

 

🔗 문제  

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

📑 내용

문제 설명

  • 실패율은 다음과 같이 정의한다.
    • 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수

전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라.

제한사항

  • 스테이지의 개수 N은 1 이상 500 이하의 자연수이다.
  • stages의 길이는 1 이상 200,000 이하이다.
  • stages에는 1 이상 N + 1 이하의 자연수가 담겨있다.
    • 각 자연수는 사용자가 현재 도전 중인 스테이지의 번호를 나타낸다.
    • 단, N + 1 은 마지막 스테이지(N 번째 스테이지) 까지 클리어 한 사용자를 나타낸다.
  • 만약 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 하면 된다.
  • 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.

 

💌 소스코드

# N stages result
# 5    [2, 1, 2, 6, 2, 4, 3, 3]   [3,4,2,1,5]
# 4    [4,4,4,4,4]    [4,1,2,3]

def solution(N, stages):
    result = {}
    length = len(stages)
    for i in range(1, N + 1):
        if length != 0:                 # 분모가 0인 케이스 예외처리
            count = stages.count(i)     # 파이썬 count 함수로  
            result[i] = count / length
            length -= count     # 총 길이에서 count를 빼주고 다음꺼 재계산
        else:
            result[i] = 0       # 이 부분에서 result[i] = i로 했다가 계속 틀렸던 부분
    return sorted(result, key=lambda x: result[x], reverse=True)

 

🙋🏻‍♂️ 후기

우선 파이썬 count함수를 써서 문제를 해결하였고, 처음에 문제를 잘못이해해서 시간을 허비했지만, 천천히 정독하여 다시 읽은 후 옳은 방향으로 나아갔던것 같습니다. 마지막에 length변수의 값이 0인경우 예외처리 해주는 부분에서
result[i] = i 로 예외처리를 해서 계속 틀렸었는데, result[i] = i로 예외처리를 하면 결국 실패율이 계속 i로 생기는 것이므로, 0으로 예외처리를 해 주었더니 잘 실행되었습니다. 
예외처리 할 때도 잘 생각하여 예외처리를 해야겠다는 것을 다시 한번 느끼는 과정이었습니다.

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함