프로그래머스/Level1
[2019 KAKAO BLIND RECRUITMENT/ 프로그래머스] 42889번 : 실패율
ydin
2022. 8. 23. 11:03
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42889
Level 1 문제이고, 스스로 푼 문제다!
stages의 각 인덱스는 사용자의 번호이고, 각 값은 각 유저가 있는 스테이지 번호다
stage[i] 값은 i 유저가 있는 스테이지이고, 이를 아직 깨지 못한 상태다. 따라서 i 는 stage[i] 단계에서 실패한 유저에 속한다
각 단계에 대해 전체 유저를 완전탐색으로 돌면서 각 단계에서 실패한 유저 수를 구한다음 해당 스테이지에서 성공한 유저들의 수로 나눈다. 이 값을 fail 해당 단계 값에 추가한다
처음에는 fail을 리스트로 구현하려고 했지만 실패율로 내림차순 정리하고, 인덱스를 출력해야하므로 해당 실패율에 대응하는 값도 필요해서 딕셔너리로 구현했다
주의할 점
실패율 자체가 소수이기 때문에, ' // ' 연산을 사용하면 다 0으로 나와서 틀린다
그렇기 때문에 ' / ' 연산을 이용하고, onStage == 0 일 때는 런타임 에러가 발생하므로, onStage != 0 일 때에만 진행한다
딕셔너리의 value로 정렬하는 법 공부하기
sorted_value = sorted(fail.items(), key = lambda x : x[1], reverse = True)
#print(sorted_value)
[(4, 1.0), (1, 0.0), (2, 0.0), (3, 0.0)]
- 정답 풀이 :
def solution(N, stages):
answer = []
#해당 스테이지에 있는 유저 수
onStage = len(stages)
fail = {}
for i in range(1, N + 1):
fail[i] = 0
for i in range(1, N + 1):
count = 0
for j in range(len(stages)):
#i 스테이지 못 깬 사람 수 구하기
if stages[j] == i:
count += 1
#이거 추가해야 런타임 에러 발생하지 않는다
if onStage != 0:
fail[i] += (count / onStage)
onStage -= count
sorted_value = sorted(fail.items(), key = lambda x : x[1], reverse = True)
for i in sorted_value:
answer.append(i[0])
return answer