ALGORITHM/Kakao

(Python) 2019 KAKAO BLIND RECRUITMENT 실패율

김쿸후 2021. 3. 25. 23:19

1. 문제

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

2. 풀이

우선 딕셔너리에 각 스테이지가 나온 횟수를 넣은 후, 

people에 전체 인원 수 (stages의 크기)를 담고 1라운드부터 각 라운드를 해결 못한 사람들을 people에서 뺀 뒤 실패율을 계산한다. 

이때 people이 0일경우 failnum이 0인 경우를 넣어줘야한다.

이후 다중배열로 (실패율, 인덱스) 순서로 넣어준 뒤, 실패율은 내림차순으로, 인덱스는 오름차순으로 정렬을 한다. 

다중배열의 경우 람다 식을 이용하여 쉽게 정렬할 수 있다. 

    ans2 = sorted(ans, key = lambda x : (-x[0], x[1])) 

이때 튜플(x[0].x[1]) 에서 -가 붙으면 내림차순으로 정렬을 하겠다는 것이다.

sorted함수에 key를 람다 함수로 전달한다. 

나 같은 경우는 다중배열 중 첫 원소는 내림차순, 뒤의 원소는 오름차순으로 나열을 해야했기에 다음과 같이 람다 식을 작성하였다. 

 

3. 코드 

a = dict()
def solution(N, stages):
    for i in range(1,N+1):
        a[i] = 0
    for i in stages:
        if i in a:
            a[i] += 1
        else:
            a[i] = 1
    
    people = len(stages)
    ans = []
    for i in range(1,N+1):
        failnum = 0
        element = []
        if i in a:
            if people == 0:
                failnum = 0
            else:
                failnum = a[i]/people
                people -= a[i]
            element.append(failnum)
            element.append(i)
            ans.append(element)
    
    ans2 = sorted(ans, key = lambda x : (-x[0], x[1])) 
    
    answer=[]
    for i in ans2:
        answer.append(i[1])
    return answer

 

4. 그외

 

파이썬이 아직 익숙하지 않아서 좀 노가다하는 경향이 있지만 금방 나아지길 바란다! ㅠㅠ

조급해하지말자! 

우리네 인생 화이팅..