https://programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
풀이 과정
도달했으나 아직 미클리어 / 도달한 플레이어 수로 표현되는 실패율을 구하고, 각 스테이지를 실패율의 내림차순 순서대로 반환하되 실패율이 같으면 앞의 스테이지가 우선적으로 오게 해달라는 문제이다.
스테이지에 도착한 플레이어 수를 표현하는 arrive 리스트, 도착했으나 클리어를 하지 못한 수를 표현하는 non_clear 리스트를 선언하고, stages 리스트를 살펴보며 값을 변경해주었다. stage에 3이 들어왔다면 arrive 0 ~ 2가 1씩 늘어나고 non_clear[2]가 1이 늘어날 것이다.
그 후 temp에 [인덱스, 실패율]을 저장한 뒤 temp.sort(key=lambda x:x[1], reverse=True)로 실패율 내림차순으로 정렬해준 뒤 answer에 index만 넣어주어 문제를 해결하였다.
리스트 내부의 값을 전부 다 1씩 증가시키는 코드를 짤 때
for i in list:
i += 1 (x)
for i in range(len(list)):
list[i] += 1 (o)
임에 유의해야 한다. 위의 코드에서는 리스트에 아무런 변화가 없다.
소스 코드
def solution(N, stages):
non_clear = [0 for _ in range(N)]
arrive = [0 for _ in range(N)]
for stage in stages:
if stage == N+1:
for number in range(N):
arrive[number] += 1
continue
for number in range(stage):
arrive[number] += 1
non_clear[stage-1] += 1
temp = []
answer = []
for number in range(N):
if arrive[number] == 0:
temp.append([number + 1, 0])
continue
temp.append([number + 1, non_clear[number] / arrive[number]])
temp.sort(key=lambda x:x[1], reverse=True)
for item in temp:
answer.append(item[0])
return answer
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 괄호 변환 [파이썬] (0) | 2022.07.02 |
---|---|
프로그래머스 - 메뉴 리뉴얼 [파이썬] (0) | 2022.07.02 |
프로그래머스 - 오픈채팅방 [파이썬] (0) | 2022.07.01 |
프로그래머스 - 문자열 압축 [파이썬] (0) | 2022.07.01 |
프로그래머스 - 제일 작은 수 제거하기 [파이썬] (0) | 2022.06.28 |