출처 : https://programmers.co.kr/learn/courses/30/lessons/42889
문제가 길어서 간략하게 캡쳐했다.
def solution(N, stages):
people = len(stages)
fail_ratio = {}
for i in range(1, N+1):
if people != 0 :
fail_ratio[i] = stages.count(i) / people
people -= stages.count(i)
else :
fail_ratio[i] = 0
return sorted(fail_ratio, key=lambda x : fail_ratio[x], reverse = True)
풀이 :
나는 리스트 성애자다. 그냥 리스트를 진짜 좋아한다...
이거 딕셔너리는 그냥 거부감 들어서 절대 안써왔는데 이 문제는 딕셔너리로 풀면 좋겠다 생각만하고 리스트만 파다가 그냥 출제자의 의도에 따르기로 하고 딕셔너리와 친해지기로 했다.
dict는 fatil_ratio[key] = 해당값으로 저장된다.
그러니 키가 1 일때 1/8 , 키가 2일때 3/7 로 이렇게 들고 올수 있다.
fail_ratio 를 dict로 받아오고 사람의 수가 0이면 fail_ratio를 0으로 설정한다. 이것의 답은 [i]고
사람이 0이 아니면 count 로 개수를 센 것을 사람의 수로 나눠주고
그 수를 다시 사람의 수에서 빼준다.
이렇게 fail_ratio 딕셔너리를 만들고
lambda x : fail_ratio[x] 를 써서 정렬된 값에 key들을 나열해주면 정답을 구할 수 있다.
'코딩테스트' 카테고리의 다른 글
백준 7568 덩치 - python (0) | 2022.01.15 |
---|---|
백준 11729 하노이 탑 이동순서 - python (0) | 2022.01.15 |
[프로그래머스] 같은 숫자는 싫어 (0) | 2022.01.13 |
[프로그래머스] 제일 작은 수 제거하기 - python (0) | 2022.01.13 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2022.01.13 |