문제
https://programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
내 풀이
Counter 함수를 써서 각 스테이지에 몇 명이 머물러 있는지 구하였다.
(현재 스테이지에 도달한 플레이어 수 = 전 단계 스테이지에 도달한 플레이어 수 - 전 단계에 실패한 플레이어의 수) 공식을 사용하였다.
스테이지에 도달한 유저가 없는 경우를 위해 예외 처리를 하였다.
from collections import Counter
def solution(N, stages):
rates = []
cnt = Counter(stages)
cur = 0
for i in range(1, N+1):
if i == 1:
cur = len(stages)
rates.append((cnt[i]/len(stages), i))
else:
cur -= cnt[i-1]
if cur > 0:
rates.append((cnt[i]/cur, i))
else:
rates.append((0, i))
return [x[1] for x in sorted(rates, key=lambda x: -x[0])]
다른 풀이
전체적인 알고리즘은 내 풀이와 동일하지만, 코드가 더 짧다.
def solution(N, stages):
result = {}
denominator = len(stages)
for stage in range(1, N+1):
if denominator != 0:
count = stages.count(stage)
result[stage] = count / denominator
denominator -= count
else:
result[stage] = 0
return sorted(result, key=lambda x : result[x], reverse=True)
다른 풀이 참고하여 내 풀이 변형하기
from collections import Counter
def solution(N, stages):
rates = []
cnt = Counter(stages)
cur = len(stages)
for i in range(1, N+1):
if cur != 0:
rates.append((cnt[i]/cur, i))
cur -= cnt[i]
else: rates.append((0, i))
return [x[1] for x in sorted(rates, key=lambda x: -x[0])]
총평
Level1인데도 불구하고 시간이 오래 걸렸다.
문제를 풀 때 "어떻게 하면 효율적으로 문제를 풀 수 있을까"를 고민하고 풀어야겠다.
'알고리즘 > 카카오 EASY' 카테고리의 다른 글
거리두기 확인하기 (Level 2) (0) | 2022.06.30 |
---|---|
뉴스 클러스터링 (Level 2) (0) | 2022.06.28 |
괄호 변환 (Level 2) (0) | 2022.06.25 |
메뉴 리뉴얼 (Level 2) (0) | 2022.06.25 |
크레인 인형뽑기 게임 (Level 1) (0) | 2022.06.24 |