내가푼 풀이
def solution(N, stages):
answer = []
# 총 사용자 수
total = len(stages)
fails = []
# 각각의 stage에 몇명의 사용자가 있는지 리스트로 나타낸다. 초기값은 0으로 설정. N+1 스테이지 까지 있다.
users = [0 for _ in range(N+1)]
for s in stages:
# users 안의 요소는 각 스테이지마다 클리어중인사람 명수
users[s-1] += 1
# i 는 각 스테이지 번호
for i in range(N):
if users[i] == 0:
fails.append((i+1, 0))
# 실패율, 반환해야 하는 값은 스테이지 번호이기 때문에 튜플로 묶었다.
# stages 는 1 이상 N+1 이하 이므로 for 문은 0,1,2,.. 이렇게 가니까 +1 해줌
else:
fails.append((i+1, users[i]/total))
total -= users[i]
sort = sorted(fails, key=lambda x: x[1], reverse = True)
for i in sort:
answer.append(i[0])
return answer
너무 난잡 그자체 리스트말고 딕셔너리로 풀고 싶었지만 딕셔너리 사용법을 몰라서 풀이를 찾아보았다.
def solution(N, stages):
result = {}
# 총 사용자
denominator = len(stages)
for stage in range(1, N+1):
if denominator != 0:
# 스테이지에 도달했으나 아직 클리어 하지 못한 플레이어 수
count = stages.count(stage)
# 실패율
result[stage] = count / denominator
# 스테이지에 도달한 플레이어 수
denominator -= count
else:
result[stage] = 0
print(result)
return sorted(result, key=lambda x, : result[x], reverse=True)
1) [(초기값) for _ in range(n)] -> [0, 0, 0, 0, 0, ··· n개 만큼] 이라는 뜻이다
2) for i in list -> list 안의 원소가 한개씩 나온다.