반응형
문제
[https://programmers.co.kr/learn/courses/30/lessons/42889]
풀이
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
return sorted(result, key=lambda x: result[x], reverse=True)
- stages에는 플레이어들이 어떤 스테이지에서 멈췄는지에 대한 정보가 들어있다. 따라서 count를 통해 쉽게 해당 스테이지에 도달했으나 멈춘 사람의 수를 파악할 수 있다
- 그리고 해당 스테이지에 도달한 사람은 1라운드에서는 '전부', 2라운드에서는 '전부-1라운드에서멈춘사람', ... 으로 진행할 수 있다
- dict의 items()를 적용하지 않고 바로 전달하면 result의 key들이 lambda로 전달된다.
- 이 때 정렬기준은 result의 key에 해당하는 결과값, 즉 실패율이 된다. 정렬된 return은 key값이므로 바로 처리가 가능하다.
def solution(N, stages):
fail = {}
for i in range(1, N+1):
try:
fail_ = len([a for a in stages if a == i]) / \
len([a for a in stages if a >= i])
except:
fail_ = 0
fail[i] = fail_
answer = sorted(fail, key=fail.get, reverse=True)
return answer
- 조건문을 활용한 배열생성을 활용할 수도 있다. (문법기억)
- try except를 활용해 분모가 0일 경우를 체크하고 0으로 만들었다.
- 마지막에 정렬에선 아예 fail.get을 key함수로 주어서 그를 기준으로 삼는다(위의 풀이에서 key값을 받아 직접 접근했던 것과 로직상으로는 동일). key값이 들어가면서 fail dictionary로부터 값을 얻고 그를 기준으로 삼는 것이다.
반응형
'💻 CS > 알고리즘 연습' 카테고리의 다른 글
[알고리즘 연습] 더 맵게 (프로그래머스 lv2, 파이썬) (0) | 2021.06.09 |
---|---|
[알고리즘 연습] 124나라의 숫자 (프로그래머스 lv2, 파이썬) (0) | 2021.06.09 |
[알고리즘 연습] 체육복 (프로그래머스 lv1, 파이썬) (0) | 2021.06.07 |
[알고리즘 연습] 쇠막대기 (백준 10799, 파이썬) (1) | 2021.05.07 |
[알고리즘 연습] AC (백준 5430, C++) (0) | 2021.04.19 |