코딩/프로그래머스
[프로그래머스/파이썬/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)이다.
