- 문제 : 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
'프로그래머스 > Level1' 카테고리의 다른 글
[월간 코드 챌린지 시즌 1 / 프로그래머스] 68935번 : 3진법 뒤집기 (0) | 2022.08.24 |
---|---|
[해시 / 프로그래머스] 42576번 : 완주하지 못한 선수 (1) | 2022.08.23 |
[완전탐색 / 프로그래머스] 42840번 : 모의고사 (0) | 2022.08.20 |
[정렬 / 프로그래머스] 42748번 : K번째 수 (0) | 2022.08.20 |
[2019 카카오 개발자 겨울 인턴십] 64061번 : 크레인 인형뽑기 (0) | 2022.08.19 |