일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- react #리액트 #동빈나
- 백준 #파이썬 #알고리즘 #코딩테스트
- 다이나믹프로그래밍
- 백준 #알고리즘 #파이썬 #코딩테스트
- 백준
- 재귀
- 백트랙킹
- Dijkstra
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- react #리액트 #동빈나 #나동빈 #유튜브강의
- 다익스트라
- java #자바
- DFS
- 코딩테스트
- 자바 #java
- dp
- css #웹 #생활코딩
- css #생활코딩 #웹
- BFS
- java #자바 #생활코딩
- java #자바 #동빈나
- 알고리즘
- 파이썬 #백준 #알고리즘 #코딩테스트
- 프로그래머스
- 투포인터
- PYTHON
- 파이썬
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- java #자바 #나동빈
Archives
- Today
- Total
커리까지
프로그래머스 실패율 파이썬 본문
728x90
SMALL
문제
실패율은 다음과 같이 정의한다.
- 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
제한 사항
- 스테이지의 개수 N은
1
이상500
이하의 자연수이다. - stages의 길이는
1
이상200,000
이하이다. - stages에는
1
이상N+1
이하의 자연수가 담겨있다.- 각 자연수는 사용자가 현재 도전 중인 스테이지의 번호를 나타낸다.
- 단,
N + 1
은 마지막 스테이지(N 번째 스테이지) 까지 클리어 한 사용자를 나타낸다.
- 만약 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 하면 된다.
- 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은
0
으로 정의한다.
입출력 예
N | stages | result |
---|---|---|
5 | [2, 1, 2, 6, 2, 4, 3, 3] | [3,4,2,1,5] |
4 | [4,4,4,4,4] | [4,1,2,3] |
답안
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | def solution(N, stages): stages.sort() stages_cnt = [] m = 0 if N>=stages[-1]: m = N else: m = stages[-1] for i in range(m): a = stages.count(i+1) if a != None: stages_cnt.append(a) else: stages_cnt.append(0) answer = [[i+1] for i in range(N)] for i in range(N): try : h = stages_cnt[i] / sum(stages_cnt[i:]) answer[i].append(1-h) except ZeroDivisionError: answer[i].append(1) answer = [i[0] for i in sorted(answer, key=lambda x:(x[1],x[0]))] return answer | cs |
- stages를 오름차순으로 정렬한다.
- 그 다음에 stages에 있는 단계들의 개수를 구하는 리스트를 만든다.
- m을 따로 설정한 이유는 N이 5여도 stages안에 있는 단계가 5보다 낮을 경우가 있어서 m을 만들었다.
- 만약에 stages안에 해당 인덱스의 단계가 없다면 0으로 설정한다.
- 그런후 2중 리스트를 만들어서 해당 리스트로 for문을 돌린다.
- try, except를 한 이유는 0으로 0을 나누면 에러가 발생하기 때문에 그 경우에 0을 넣기 위해서 하였다.
- 우리가 구한 스테이지별 개수를 맨 처음부터 구해나간다.
- 예를 들어 총 6단계까지 클리어한 유저가 있고 1간계에는 1명이고 뒤에 7명의 유저가 더 있다. 그렇기 때문에 해당 i/[i:] 를 한다. 해당 스테이지부터 뒤에있는 스테이지까지 다 더해서 나눈다.
- 마지막으로 이중리스트를 람다로 정리하면 된다.
728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
백준 2012번 등수 매기기 파이썬 (0) | 2021.01.14 |
---|---|
백준 2606 바이러스 파이썬 (0) | 2021.01.13 |
프로그래머스 크레인 인형뽑기 파이썬 (0) | 2021.01.12 |
백준 2583번 영역구하기 (0) | 2021.01.10 |
백준 10870번 피보나치 수 5 (0) | 2021.01.08 |
Comments