✔️ code
def solution(N, stages):
answer = []
fail_rate=[] #실패율
for i in range(1, N+1):
user1=0 #도전 유저 수
user2=stages.count(i) #클리어하지 못한 유저 수
for j in stages:
if i<=j:
user1+=1
fail_rate.append((i, user2/user1)) #튜플 형태로 저장
#실패율을 기준으로 내림차순 정렬
fail_rate.sort(key=lambda x:x[1], reverse=True)
#튜플의 첫 번째 값만 저장
for i in range(N):
answer.append(fail_rate[i][0])
# solve:
1~5 단계가 있다고 할때 4 스테이지에 있는 유저는 1, 2, 3, 4 단계에 도전한 것이므로
i<=j 조건문을 사용해 도전 유저의 수를 구했다.
튜플 형태로 (스테이지, 실패율) 을 저장하고 람다식으로 내림차순 정렬한 뒤,
튜플의 첫 번째 값(스테이지 값) 만 저장한 것인데 실행에는 오류가 나지 않았으나 채점을 하면서 오류가 발생했다.
시간 초과가 문제인 것 같아 다시 풀어 보았다.
✔️ code
def solution(N, stages):
answer=[]
fail_rate={}
total_user=len(stages)
for i in range(1, N+1):
if total_user!=0: #도전유저-실패유저 값이 0이 아니라면,
fail_user=stages.count(i)
fail_rate[i]=fail_user/total_user
total_user-=fail_user
else: #값이 0이라면,
fail_rate[i]=0 #실패율은 0이다.
#딕셔너리 값에 있는 실패율로 내림차순 정렬하고 키 값을 반환
answer= sorted(fail_rate, key=lambda x:fail_rate[x], reverse=True)
return answer
>>>
람다식을 사용하는 것에 익숙하지 않아 이것은 다른 풀이를 참고했다.
왜 람다식은 쓸 때마다 헷갈리는지 모르겠다. 더 많이 문제를 풀다 보면 해결되겠지 !
'알고리즘' 카테고리의 다른 글
[스택] 가장 큰 수 (0) | 2022.03.15 |
---|---|
[그리디] 역수열 (0) | 2022.03.09 |
[그리디] 증가수열 만들기 (0) | 2022.03.05 |
[그리디] 침몰하는 타이타닉 (0) | 2022.03.04 |
[알고리즘] 프로그래머스 크레인 인형뽑기 게임 (0) | 2022.03.04 |