종식당

[프로그래머스 lv.1] 2019 KAKAO BLIND RECRUITMENT 실패율 본문

프로그래머스

[프로그래머스 lv.1] 2019 KAKAO BLIND RECRUITMENT 실패율

종식당 2024. 4. 1. 17:38
728x90
반응형

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

 

프로그래머스

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

programmers.co.kr

  • 문제 설명
    stages리스트에는 사용자가 현재 도전 중인 stage가 저장되어 있으며 만약 총 8명의 사용자가 있다고 해보자.
    stages리스트에는 총 8개의 stage가 저장되어 있을 것이며 1번 stage가 하나 있다면 1번 stage의 실패율은 1/8이라고 할 수 있다. 
    다음으로 2번 stage가 3개 있다면 1번 stage에 도전 중인 사용자 한 명을 제외한 총 7명의 사용자 중에서 3명이 도전하고 있으니 3/7로 실패율을 정의할 수 있다.
    이런 식으로 모든 stage에서 실패율을 구하고 이를 실패율을 기준으로 내림차순으로 정렬하여 return 하면 된다.
    이때, 예외처리를 하나 해주어야 하는데 
    스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.
    이에 대한 실패율은 0으로 처리하면 된다.

  • 제출 코드
def solution(N, stages):
    dict = {} #딕셔너리에 스테이지와 실패율 저장
    user = len(stages) #모든 사용자
    for i in range(1,N+1):
        not_clear_user = stages.count(i) #통과 못한 사용자
        if user == 0:
            fail_rate = 0
        else:
            fail_rate = not_clear_user/user #실패율
        dict[i] = fail_rate
        user -= not_clear_user #총 사용자 업데이트
    result = sorted(dict.items(), key = lambda x : -x[1]) #실패율을 기준으로 내림차순 정렬
    answer = []
    for i in range(len(result)):
        answer.append(result[i][0])
    return answer

 

  • 코드 설명
    먼저 각 stage에 해당하는 실패율을 저장하기 위해 딕셔너리를 하나 만들고 for문을 돌면서 각각의 stage에 도전 중인 사용자가 몇 명인 지를 count()를 통해 구해주었다. 그리고 실패율을 계산한 후 딕셔너리에 stage를 key, stage에서의 실패율을 value로 저장하였다. 그 후 이전 stage에 있던 사용자는 총사용자에서 제외를 해주고 실패율을 계산해야 하기 때문에 계속 갱신해 주었다.
    result = sorted(dict.items(), key = lambda x : -x [1]) 이 코드를 통해 실패율을 기준으로 내림차순으로 정렬해 주었다.
    자세히 살펴보면 dict.items()를 통해 딕셔너리에서 key, value쌍을 뽑아낼 수 있고 key = lambda x : -x [1]이를 이용해서 내림차순으로 정렬할 수 있다. x [0]에는 각각의 stage, x [1]에는 실패율이 저장되어 있을 것이고 이를 -x [1]로 나타내었으니 내림차순으로 정렬될 것이다. 
    그리고 정렬된 리스트에서 stage만 뽑아서 새로운 리스트를 만들어 준 후 이를 반환하면 된다.
    그리고 초반에 언급했던 실패율을 0으로 처리하는 부분은 간단하게 예외처리를 해주면 된다.
728x90
반응형