728x90
320x100
실패율 이란 이름 답게 실패를 많이 한 문제 ....
def solution(N, stages):
answer = [0 for i in range(N)]
user = 0
failUser = 0
score = {}
for i in range(len(answer)):
for j in stages:
if i+1 <= j :
user += 1
if i+1 >= j:
failUser += 1
if user == 0:
score[i+1] = 0
else :
score[i+1] = failUser / user
user = 0
failUser = 0
sorted_dict = dict(sorted(score.items(), key= lambda item:item[1], reverse=True))
return list(sorted_dict.keys())
처음에 이렇게 짜봄. 이렇게 짜는 데에도 쉽지 않았음.
여기서 람다식과 dict 활용하여 작성.
그런데 테스트 하나가 걸리면서 실패.....아마 시간복잡도 때문인거 같았음. 그치만 어떻게 줄어야 하지...? 고민하던 찰나에 이런 풀이를 보게 되었음. (이 풀이를 제공해준 팀원에게 무한감사....)
(+) 우리 팀원이 알려준 풀이
def solution(N, stages):
People = len(stages)
faillist = {}
for i in range(1, N + 1):
if People != 0:
faillist[i] = stages.count(i) / People
People -= stages.count(i)
else:
faillist[i] = 0
return sorted(faillist, key=lambda i: faillist[i], reverse=True)
람다식을 이용하는 방법은 거의 동일하고 (그러나 더 간단하네...)
포문을 돌릴 때 아예 이미 스테이지에 도달한 사람은 제외하는 방식으로 계산하여 시간복잡도를 줄였다.
히잉 이러케 도대체 어떻게 생각하는거야....
처음엔 풀지도 못해서 문제다가 이제는 풀어도 시간복잡도를 줄이는게 문제구만......
728x90
320x100
'💻 하나씩 차곡차곡 > 프로그래머스 (Python)' 카테고리의 다른 글
[프로그래머스/python/Lv1] [1차] 다트 게임 (2) | 2023.12.25 |
---|---|
[프로그래머스/python/Lv1] 다트 게임 (1) | 2023.12.24 |
[프로그래머스/python/Lv1] 소수 만들기 (0) | 2023.12.23 |
[프로그래머스/python/Lv1] 두 개 뽑아서 더하기 (0) | 2023.12.22 |
[프로그래머스/python/Lv1] [1차] 비밀지도 (0) | 2023.12.21 |