실패율 - Python
2023. 12. 13. 00:07ㆍ공부/📝 프로그래머스
1. 풀이 코드
def solution(N, stages):
answer = []
count_list1 = []
count_list2 = []
people = len(stages)
for i in range(1, N + 1):
if people == 0:
count_list1.append(0)
count_list2.append(0)
else:
count_list1.append((stages.count(i)/people))
count_list2.append((stages.count(i)/people))
people -= stages.count(i)
count_list2.sort()
# print(count_list1)
# print(count_list2)
for _ in range(N):
search_target = count_list2.pop()
for i in range(N):
if search_target == count_list1[i]:
if i + 1 not in answer:
answer.append(i + 1)
# print("=" * 10)
return answer
print(solution(7, [2, 1, 2, 6, 2, 4, 3, 3]))
처음에 문제를 읽을 때 실패율이 아니라 실패 횟수로 봐서 뒤늦게 수정하느라 코드가 난잡해졌습니다. count_list1은 스테이지 1번부터의 차례대로 실패율이며, count_list2는 실패율을 오름차순으로 정렬한 뒤에, pop() 메서드와 index() 메서드를 사용하여 위치값을 찾았습니다.
print(solution(7, [2, 1, 2, 6, 2, 4, 3, 3]))은 도달한 인원이 없을 경우. people 변수가 0이 되면서 0으로 나누는 오류를 제대로 검출하는지 알기위해 적었습니다.
2. 다른 사람 풀이 코드
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)
저도 처음부터 실패율이라고 읽었더라면 이와 비슷하게 풀었으리라 생각됩니다. 딕셔너리를 사용하는게 편하긴 하군요.
'공부 > 📝 프로그래머스' 카테고리의 다른 글
로또의 최고 순위와 최저 순위 - Python (0) | 2024.01.24 |
---|---|
[1차] 다트 게임 - Python (0) | 2023.12.13 |
덧칠하기 - Python (0) | 2023.12.11 |
기사단원의 무기 - Python (0) | 2023.12.10 |
[PCCE 기출문제] 1번 / 출력 - Python (0) | 2023.12.10 |