🙌 출처 - 프로그래머스 🙌
다음 문제는, 실패율을 구하는 문제입니다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
전체 스테이지의 수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 반환하는 문제입니다.
- 먼저 스테이지별 실패율을 담아낸 후
- 실패율이 높은 스테이지를 순서대로 담아냄으로써 이 문제를 해결했습니다.
#70점 - 런타임 에러
def solution(N, stages):
answer = []
failure = []
user = len(stages)
for i in range(1, N+1):
answer.append(stages.count(i)/user)
user -= stages.count(i)
for i in range(len(answer)):
failure.append(answer.index(max(answer))+1)
answer[failure[i] - 1] = -1
return failure
아래의 주어진 조건을 추가하지 않아 런타임 에러가 발생했습니다.
👉 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.
# 100점
def solution(N, stages):
answer = [] # 스테이지별 실패율을 담아내는 리스트
failure = [] # 실패율이 높은 스테이지를 담아내는 리스트
user = len(stages) # 게임에 참가한 총 유저
for i in range(1, N+1):
if user != 0:
answer.append(stages.count(i)/user) # 플레이어수 / 스테이지에 도달한 플레이어 수
user -= stages.count(i) # 클리어하지 못한 유저를 제외해준다.
else:
answer.append(0) # 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.
for i in range(len(answer)):
failure.append(answer.index(max(answer))+1) # 실패율의 max값의 index를 구해 failure에 삽입
answer[failure[i] - 1] = -1 # 게속해서 max값을 추출해내기 위해 max를 -1로 변경
return failure
# 다른 사람이 푼 코드
def solution(N, stages):
result = {}
denominator = len(stages)
for stage in range(1, N+1):
if denominator != 0:
count = stages.count(stage)
result[stage] = count / denominator
denominator -= count
else:
result[stage] = 0
print(result)
return sorted(result, key=lambda x : result[x], reverse=True)
#-------출력을 위한 코드입니다------#
N = 5
stages = [2, 1, 2, 6, 2, 4, 3, 3]
print(solution(N, stages))
람다 함수는 이름이 없는 함수입니다. 람다함수의 장점은 코드의 간결함 및 메모리 절약이라고 생각할 수 있습니다. 쓰이는 형태는 다음과 같습니다.
lambda 인자 : 표현식
# 다음은 두 수를 더하는 함수입니다.
>>> def hap(x, y):
... return x + y
...
>>> hap(10, 20)
30
# 람다 형식으로는 다음과 같이 표현이 가능합니다.
>>> (lambda x,y: x + y)(10, 20)
30
# example
>>> str_list = ['좋은하루','good_morning','굿모닝','niceday']
>>> print(sorted(str_list, key=lambda x : x[1])) # 람다
['niceday', 'good_morning', '굿모닝', '좋은하루']
람다함수는 결과부분된 부분을 return 키워드 없이 자동으로 return 해주게 됩니다.
# 3. 다른 사람이 푼 코드
return sorted(result, key=lambda x : result[x], reverse=True)
# lambda는 기준을 result[x], 즉 value로 정렬한다는 뜻 입니다. 따라서 key가 출력되게 됩니다.