반응형

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

from collections import defaultdict

def solution(N, stages):
    stageinfos = defaultdict(lambda: [0, 0])

    for user in stages: # 유저들의 현재 stage를 보고 모든 스테이지의 도달과 실패를 조정함.
        for i in range(1, user + 1):
            stageinfos[i][0] += 1
        stageinfos[i][1] += 1 

    if N + 1 in stageinfos: # N + 1은 모든 스테이지를 통과한 표시이므로 제거
        del stageinfos[N + 1]

    zerofails = [i for i in range(1, N + 1) if i not in stageinfos.keys()] # 도달한 사람이 없는 stages
  # 실패율로 내림차순 정렬 + zerofails
    return [stageinfo[0] for stageinfo in sorted(stageinfos.items(), key=lambda x: x[1][1] /x[1][0], reverse=True)] + zerofails
def solution(N, stages):
    stageinfos = dict()
    zerofails = [stage for stage in range(1, N + 1) if stage not in set(stages)] # 실패율 0인 stages
    
    for stage in set(stages): # 실패율이 존재하는 stage만 실패율 계산
        stageinfos[stage] = stages.count(stage) / len([i for i in stages if i >= stage])
        
    if stageinfos.get(N + 1) is not None: # N + 1 stage는 제거
        del stageinfos[N + 1]
        
    return sorted(stageinfos, key=stageinfos.get, reverse=True) + zerofails 

→ key=stageinfos.get 는 key=lambda x: stageinfos[x] 와 같음.

반응형

'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글

길 찾기 게임  (0) 2021.02.21
후보키  (0) 2021.02.19
오픈채팅방  (0) 2021.02.19
백준 2839 : 설탕 배달  (0) 2021.02.18
백준 1931 : 회의실 배정  (0) 2021.02.18

+ Recent posts