알고리즘/문제 풀이

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

광규니 2021. 6. 29. 20:29
반응형

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

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

풀이

lst를 [실패율,인덱스]에 맞게 쓰려고 정의했다

두가지가 오래 걸렸다

 

첫번째, 처음에는 lst를 내림차순으로 배열해놨는데 같은것만 오름차순으로 어띃게 만들지 고민하다가

lambda를 참고했다.

두번째, 테스트 케이스 1,6,23,24..... 몇개가 계속 런타임 에러걸리는데

뭔가 하다가

N=5

stages=[2,1,2,4,2,4,3,3]

이와 같이 5에 경우 사람이 0명으로 0으로 나누면 에러뜨는 상황을 발견해서 수정했다..

def solution(N, stages):
    answer = []
    people=len(stages)
    lst=[[0,i+1] for i in range(N)]
    if N==1:
        answer.append(1)
    else:
        for i in range(1,N+1):
            if people==0:
                break
            cnt=stages.count(i)
            if lst[i-1][0]==0:
                lst[i-1][0]=(cnt)/people
                if cnt>=0:
                    people-=(cnt)
        lst.sort(key = lambda x: (-x[0], x[1]))
        
        for i in range(N):
            answer.append(lst[i][1])
    return answer

 

알아가야할거

lambda 함수를 사용하는 습관을 들여야겠다.!!

위에 예제처럼 람다로 정렬하는 방법

x로 잡고 -x[0]를 붙이면 내림차순으로 먼저 정렬되고

그 다음 우선순위인 x[1] 기준으로 오름차순 정렬된다....

반응형