정렬
데이터를 특정 기준에 따라서 순서대로 나열
- 선택 정렬 : 가장 작은 데이터를 선택
- 삽입 정렬 : 특정한 데이터를 적절한 위치에 삽입
- 퀵 정렬 : 기준 데이터를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꿈. 피벗(기준) 사용(ex. 리스트에서 첫 번째 데이터를 피벗으로 정한다)
- 계수 정렬(count sort) : 특정한 값을 가지는 데이터의 개수를 카운트하는 방법 (모든 범위를 담을 수 있는 크기의 리스트를 선언)
- 별도의 리스트를 선언하고 그 안에 정렬에 대한 정보를 담음
- 가장 큰 데이터와 가장 작은 데이터의 차이가 1,000,000을 넘지 않을 때 효과적으로 사용
전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨 잇는 배열을 return 하도록 solution 함수를 완성하세요.
5
2, 1, 2, 6, 2, 4, 3, 3
[3, 4, 2, 1, 5]
4
4 4 4 4 4
[4, 1, 2, 3]
def solution(N, stages):
stage_count = [0] * (N+1)
for stage in stages:
stage_count[stage-1] += 1
fail_rate = [0] * N
front_user = 0
fail_rate[0] = (stage_count[0]/len(stages),1)
for i in range(1, len(stage_count)-1):
front_user += stage_count[i-1]
# 사용자가 높은 스테이지까지 도달하지 못한 경우 스테이지에 도달한 플레이어의 수가 0이므로 실패율을 0으로 정해준다.
if len(stages) - front_user != 0:
fail_rate[i] = (stage_count[i]/(len(stages) - front_user), i+1)
else:
fail_rate[i] = (0, i+1)
result = sorted(fail_rate[:N],key= lambda x: x[0], reverse=True)
answer = [i[1] for i in result]
return answer
실패율과 스테이지를 한 번에 저장하기 위해서 튜플로 실패율과 스테이지를 리스트에 저장하였다.
front_user는 현재 스테이지까지 도달하지 못한 사용자의 수를 나타낸다.
def solution(N, stages):
answer = []
length = len(stages)
for i in range(1, N+1):
count = stages.count(i)
if length == 0:
fail = 0
else:
fail = count / length
answer.append((i, fail))
length -= count
anwser = sorted(answer, key= lambda t: t[1], reversed=True)
answer = [i[0] for i in answer]
return answer
실패율과 스테이지를 함께 저장하기 위해서 튜플을 사용했는데, 다른 풀이를 보니 딕셔너리를 사용하기도 했다.
다른 풀이를 보면서 파이썬 문법이 어떻게 사용될 수 있는지 배워야 겠다.
딕셔너리
{Key1: Value1, Key2: Value2, ...}
딕셔너리 쌍 추가
a[1] = 'a'
{1: 'a'}