Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

잠 안 올 때 끄적끄적

[프로그래머스/파이썬/python3] Lv1. 실패율 본문

코딩/프로그래머스

[프로그래머스/파이썬/python3] Lv1. 실패율

kerp 2023. 2. 2. 17:46

> 문제

> 코드

def solution(N, stages):
    res = {k:0 for k in range(1,N+2)}
    for i in set(stages):
        res[i] = sum([st <= i for st in stages])/len(stages)
        stages = [s for s in stages if s!=i]
    res.pop(N+1)
    ans = sorted(res.items(), key=lambda x: x[1], reverse=True)
    
    return [i for i,j in ans]

흠냠냐

좋은코드는 아닌 것 같은게 시간이 대박 오래걸렸다. 7초 넘었는데.. for문 중첩 때문인가 싶다.

일단 고쳐야 할 부분이

1. 오류 없애려고, dict에 1〰️N+1까지 key를 넣었다. 그래야 나중에 pop할 때 키 없다고 에러 안뜨니까. 여기가 좀 더러운 것 같고

2. for문ㅠ set으로 줄여보려고 하긴 했는데 최악의 경우 시간복잡도가 O(n^2)이라 비효율적인 것 같다. 

3. sorted에서, 다른 사람이 한 걸 봤는데 

sorted(result, key=lambda x : result[x], reverse=True)

리턴을 그냥 이렇게 하셨더라고. 이렇게 하면 바로 key가 출력이 된다. value로 정렬하고 key만 뽑기... 깔끔해

 

다른 분은 이렇게 풀었는데 훨씬 짧게 걸린다고 한다. 시간복잡도 O(n)이다.