세상을 바꾸는 데이터

[프로그래머스] 실패율 - 파이썬 본문

PS Study/이코테 문제풀이

[프로그래머스] 실패율 - 파이썬

Industriousness 2022. 3. 3. 12:21


문제 링크:

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

이 문제는 2019 카카오 신입 공채 1차 기출문제, 이코테 기출 25번 문제입니다.



풀이 유형:

구현, 정렬

 

문제풀이 Point

1. O(NlogN)의 시간으로 풀면 통과 가능한 문제

2. 문제에서 주어진대로 구현하면 되는 문제

 

풀이 과정:

이 문제는 실패율의 정의에 따라서 실수 없이 구현을 잘해주면 되는 문제이다.

시간 제한이 1초, stages의 길이가 200,000이므로 O(NlogN)의 시간으로 정렬을 수행하면 충분하다.

 

실패율: '스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수' / '스테이지에 도달한 플레이어의 수'

 

1. 스테이지 번호를 1부터 N까지 증가시키며, 해당 단계에 머물러 있는 플레이어들의 수(count)를 계산한다.

2. 플레이어들의 수(count) 정보를 이용하여 모든 스테이지에 따른 실패율을 계산한 뒤에 배열(answer)에 추가한다.

3. 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호를 출력해야 하므로 lambda 함수를 이용하여 정렬한다.

 

풀이 코드:

# 실패율
def solution(N, stages):
    answer = []
    length = len(stages)
    # 1부터 N까지 스테이지를 하나씩 살펴보며
    for i in range(1, N+1):
        # 아직 클리어하지 못한 플레이어의 수 세기
        count = stages.count(i)
        # 실패율 계산
        if length == 0:
            fail = 0
        else:
            fail = count / length
        # 다음 스테이지에 도달한 플레이어의 수 계산
        length -= count
        # 배열에 (스테이지 번호, 실패율) 추가
        answer.append((i, fail))
    # 실패율 내림차순을 기준으로 정렬
    answer = sorted(answer, key=lambda x: x[1], reverse = True)
    # 각 스테이지 번호를 실패율의 내림차순으로 정렬
    answer = [i[0] for i in answer]
    return answer

 

프로그래머스 실패율

728x90
반응형
Comments