Just Fighting
[프로그래머스] 실패율 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/42889
<문제 설명>
스테이지의 개수 N과 게임 이용자가 현재 머물러 있는 스테이지가 담긴 배열 stages가 매개변수로 주어진다.
이를 이용해 각 스테이지마다의 실패율을 구하고, 실패율이 높은 순서로 스테이지의 번호를 배열에 담아 리턴한다.
stages에 N+1은 스테이지 N을 통과했다는 의미.
실패율이 같다면 스테이지 번호가 낮은 순서가 먼저.
스테이지에 도달한 사람이 아무도 없으면 실패율은 0으로 정의.
<문제 이해>
먼저 stages에 있는 수를 collections.Counter()를 이용하여 세고,
그것을 이용하여 실패율을 구하면 될 것이라고 생각했다.
실패율은 현재 i 스테이지에 있는 사람의 수를 Xi라고 했을 때
처음에는 Xi / (len(stages)-X(i-1)) 이라고 생각했으나
분모에 X(i-1)이 아니라 X0부터 X(i-1)이 합한 값이 들어가야 맞다고 생각했다.
그리고 마지막으로 실패율 딕셔너리를 이용하여 value 값을 정렬해 리턴하면 된다고 생각했다.
<문제 풀이>
import collections
def solution(N, stages):
prop = {}
cnt = collections.Counter(stages)
for i in range(N+2): # stages에 없는 숫자 넣어주기
if i not in cnt : cnt[i] = 0
cal = 0 # 실패율 계산
for i in range(1, N+1):
cal += cnt[i-1] # X0부터 X(i-1)까지의 합계
if cnt[i] == 0: prop[i] = 0 # 사람이 아무도 없으면 실패율 0
else: prop[i] = cnt[i]/(len(stages) - cal) # 그렇지 않으면 실패율 계산
return list(dict(sorted(prop.items(), key = lambda x : x[1], reverse=True)).keys())
문제 이해와 접근은 나쁘지 않았는데 collections.Counter 함수 이름을 자꾸 까먹는다...;;;
<풀이 개선>
다른 사람의 풀이를 보다가 딕셔너리 값 정렬하는데 조금 더 간단한 코드가 있어서 추가한다.
return sorted(prop, key = lambda x : prop[x], reverse=True)
728x90
'Algorithm > 코딩테스트 연습' 카테고리의 다른 글
[프로그래머스] 124 나라의 숫자 (0) | 2022.02.04 |
---|---|
[프로그래머스] 멀쩡한 사각형 (0) | 2022.02.03 |
[프로그래머스] 순위 검색 (0) | 2022.01.26 |
[프로그래머스] 괄호 변환 (0) | 2022.01.25 |
[프로그래머스] 메뉴 리뉴얼 (0) | 2022.01.21 |
Comments