728x90
반응형
문제: https://school.programmers.co.kr/learn/courses/30/lessons/42889
실패 코드
def solution(N, stages):
answer = []
ans_dict = {}
cnt = [0] * len(stages)
# 나는 도전자를 이중for문을 돌면서 찾았는데 ...
for i in range(len(stages)): # 0 1 2 3 4 5 6 7
for j in range(len(stages)): # 0 1 2 3 4 5 6 7
if (i+1) == stages[j]:
cnt[i] += 1
if i == 0:
ans_dict[i+1] = (cnt[i] / len(stages))
elif i < N: # 1 2 3 4
ans_dict[i+1] = (cnt[i] / (len(stages)-sum(cnt[:i])))
ans_dict = sorted(ans_dict.items(), key=lambda x: -x[1]) # O(NlogN)
for k, v in ans_dict:
answer.append(k)
return answer
💥 성공 코드
def solution(N, stages):
challenger = [0] * (N+2) # stage별 도전자 수 (0번 idx, 마지막 stage 성공자)
for stage in stages:
challenger[stage] += 1
fails = {} # stage별 실패한 사용자 수 계산
total = len(stages)
# 각 stage를 순회하며, 실패율 계산
for i in range(1, N+1):
if challenger[i] == 0: # 도전한 사람이 없는 경우, 실패율은 0
fails[i] = 0
else:
fails[i] = challenger[i] / total
total -= challenger[i] # 다음 stage 실패율을 구하기 위해 현재 stage 인원을 뺌
result = sorted(fails, key=lambda x: -fails[x]) # value로 key 정렬
return result
실패 코드에서 나는 도전자를 이중for문을 돌면서 찾았는데
성공 코드를 보면 for문 한 번 돌면서 찾는다 !
728x90
'자료구조 및 알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] level1. 크레인 인형뽑기 게임 (0) | 2024.06.18 |
---|---|
[프로그래머스] level2. 방문 길이 (1) | 2024.06.14 |
[프로그래머스] level1. 모의고사 (0) | 2024.06.13 |
프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 (SQL) (0) | 2024.04.19 |
프로그래머스 - 조건별로 분류하여 주문상태 출력하기 (SQL) (0) | 2024.04.18 |