매일 매일 성장하는 섭섭군

[Seop's의 코드풀이] 프로그래머스 실패율 (2019 KAKAO BLIND RECRUITMENT) - Python 본문

알고리즘 문제풀이/프로그래머스

[Seop's의 코드풀이] 프로그래머스 실패율 (2019 KAKAO BLIND RECRUITMENT) - Python

섭섭군 2020. 5. 12. 12:10
반응형

이번에 풀어볼 문제는 프로그래머스에 있는 실패율이라는 문제입니다.

2019년 카카오 블라인드 채용에 나왔던 문제인데요 문제는 다음과 같습니다.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제를 요약하면 다음과 같습니다.

N 개의 스테이지가 존재하고 stages란 배열에 참가자들이 현재 도전중인 스테이지가 주어진다.
현재 도달한 스테이지는 아직 클리어하지 못한 것이다.
각 스테이지마다 실패율 : (스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수)/ (스테이지에 도달한 수)
실패율이 높은 순서대로 스테이지의 번호가 담긴 배열을 출력하라!!

필자는 본 문제를 딕셔너리를 활용해서 풀었습니다.

다음과 같이 딕셔너리에 적재했는데요.

 

st_dict = {스테이지번호 : [스테이지에 도달한 사람, 도달했으나 클리어하지 못한 사람]}

 

이런 식으로 딕셔너리에 저장하고 딕셔너리에 있는 정보를 토대로 실패율을 계산했습니다.

 

전체적인 코드는 다음과 같습니다.

피드백과 질문은 언제나 감사드립니다.

def solution(N, stages):
    answer = []
    st_dict = dict()
    ans_dict = dict()
    for i in range(1, N + 1) :
        st_dict[i] = [0,0]
        ans_dict[i] = 0
        #  [0] = 스테이지에 도달한 사람 [1] = 도달했으나 클리어하지 못한 사람
    for s in stages :
        for i in range(1, s ) :
            st_dict[i][0] += 1
        if s <= N :
            st_dict[s][1] += 1
            st_dict[s][0] += 1
    
    #  실패율을 계산!! 
    for k, v in st_dict.items() :
        if v[0] == 0 :
            ans_dict[k] = 0
        else :
            ans_dict[k] = v[1]/v[0]
    
    result = list(sorted(ans_dict.items(), key= lambda x: (-x[1], x[0] )))
    for i in result :
        answer.append(i[0])

    return answer

 

반응형
Comments