[PG42889] 실패율

프로그래머스

🚩 문제 설명

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

PG42889

⏱️ 시간 복잡도
▪ 전체 스테이지의 수는 N개 이다.
▪ 전체 스테이지의 수 만큼 번호마다의 실패율을 확인한다.
▪ 따라서 대략적인 시간복잡도는 O(N)이라고 할 수 있다.

실패율 = 스테이지 아직 클리어하지 못한 플레이어의 수 / 스테이지 도달한 플레이어 수

◾ 각 스테이지의 실패율을 구해서 실패율이 높은 스테이지 순으로 배열에 담아 출력하는 문제

 

 

 


 

 

 

입출력

N : 총 스테이지의 갯수
stages : 플레이어가 남아있는 스테이지 배열
return ➡️ 실패율이 높은 순서로 스테이지 번호를 담은 배열 반환
N stages return
5 [2, 1, 2, 6, 2, 4, 3, 3] [3,4,2,1,5]
4 [4,4,4,4,4] [4,1,2,3]

 

 

 


 

 

 

📑 문제 풀이

with 파이썬 (Python)

def solution(N, stages):
    ans = []
    fails = {} # 스테이지마다 실패율
    players = len(stages) # 총 플레이중인 플레이어
    completed = 0 # 스테이지 완수하지 못한 사람

    for i in range(1, N+1):
        if players - completed == 0:
            fails[i] = 0
            continue
        fail = stages.count(i) / (players - completed)
        completed += stages.count(i)
        fails[i] = fail

    for k, v in sorted(fails.items(), key = lambda item: item[1], reverse=True):
        ans.append(k)

    return ans

💬 Point

➡️  count() 를 활용하여 각 스테이지 번호마다 플레이어의 수를 센다.
➡️  sorted(fails.items, key = lambda item: item[1], reverse=True)

◾ 만약 players - complted == 0 이라면 continue를 해줘야한다.

  • 그렇지 않으면 1번, 6번, 7번 문제 등에서 런타임 에러가 난다.
  • 반례
    • N = 5, stages = [2, 2, 2, 2, 2]
    • 1이랑 2에서 끝나는데 그 뒤부터 0으로 나누기 때문에 런타임 에러가 난다.

◾ stages.count()를 해서 몇명의 플레이어가 아직 해당 스테이지에 남아있는지 구한다.

◾ 해당 스테이지보다 전의 스테이지를 끝내지 못한 사람들의 수를 빼준다.

  • 필자는 이 값을 completed 라는 변수에 넣어놨는데 지금 생각해보니 변수명을 잘못 지정한 것 같음. 😅
  • 그니까 players - completed가 되어야 완수한 사람이 되는 것이다.

◾ 키와 값으로 쌍으로 묶여 있는 fails 딕셔너리를 값을 기준으로 내림차순한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# 프로그래머스 실패율 파이썬

# 프로그래머스 실패율 런타임 에러

 


 

728x90

'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 프로그래머스' 카테고리의 다른 글

[PG12903] 가운데 글자 가져오기  (0) 2021.11.29
[PG72411] 메뉴 리뉴얼  (0) 2021.11.29
[PG42586] 기능개발  (0) 2021.11.23
[PG12901] 2016년  (0) 2021.11.23
[PG42888] 오픈채팅방  (0) 2021.11.21