250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- position
- venv
- googlesheet
- 우선순위
- iterable
- itertools
- 가상환경
- 함수성능평가
- Iterator
- A태그
- vscode
- git #github #내일배움캠프
- gitignore
- AI 5기
- sql
- cte
- Display
- 알고리즘
- time()
- with\
- WIL
- target
- AI
- 함수실행시간
- googleappscript
- 프로그래머스
- onClick
- Level1
- python
- 내일배움캠프
Archives
- Today
- Total
05의 개발 계발
[TIL] 230421 실패율 | try-except , dict, sorted 본문
728x90
페어프로그래밍 결과 코드
##############함수 로직################
'''
1.input값과 result값을 보기
-input
N :총 스테이지 수
stages : .element 플레이어의 도전중인 스테이지
-result
실패율이 높은 스테이지 순으로 스테이지의 번호가 list값으로 나와야한다.
=>스테이지별 실패율 구하고, 역순 정렬하기
스테이지별 실패율 = 도전 중인 플레이어 수/ 도전중인 플레이어수+지나간 플레이어수
도전 중인 플레이어수+지나간 플레이어수= 총 플레이어수 - 도전 못한 플레이어수
도전 중인 플레이어 수는 dict로 구하기 → key값을 통해서 시간복잡도 낮추기 위해서이다.
각 스테이지 별 실패율을 for문과 key를 통해서 구한후
실패율(key)에 해당되는 스테이지(value)를 list값으로 저장 (이때 list는 정렬되며 저장된다.)
key값으로 역순정렬 후 그에 대한 스테이지(value)를 for문으로 순차적으로 합쳐줌으로써 결과값을 구했다.
'''
def solution(N, stages):
# key:머물고있는 스테이지 value:도전중인 플에이어 수 dict에 저장
# key:stage value:challenger수 dict에 저장
challenger_dic={}
for player_stage in stages:
try:
challenger_dic[player_stage] += 1
except:
challenger_dic[player_stage] = 1
#전체 도전자 수 구하기
players=len(stages)
# 실패율을 저장할 dict 선언
fail_rates={}
#스테이지 수만큼 for반복문 실행
for stage in range(1,N+1):
#실패율 계산
try:
fail_rate=challenger_dic[stage]/players #실패율 = 특정스테이지에 있는 플레이어수/특정스테이지를 겪은 플레이어수
players-=challenger_dic[stage] #이전 스테이지의 도전자 수만큼 줄여라
except:
fail_rate=0
#실패율 dict에 저장
try:
fail_rates[fail_rate] += [stage]
except:
fail_rates[fail_rate] = [stage]
#실패율이 높은순으로 정렬
fail_vals=sorted(fail_rates.keys(),reverse=True) # sorted(dict,reverse=True) 의 경우 value값으로 1차 정렬, key값으로 2차 정렬
#실패율에 해당하는 라운드 빈리스트에 저장
result=[]
for fail_val in fail_vals:
result += fail_rates[fail_val]
return answer
주석제거 코드
def solution(N, stages):
challenger_dic={}
players=len(stages)
fail_rates={}
for player_stage in stages:
try:
challenger_dic[player_stage] += 1
except:
challenger_dic[player_stage] = 1
for stage in range(1,N+1):
try:
fail_rate=challenger_dic[stage]/players
players-=challenger_dic[stage]
except:
fail_rate=0
try:
fail_rates[fail_rate]+=[stage]
except:
fail_rates[fail_rate]=[stage]
fail_vals=sorted(fail_rates.keys(),reverse=True)
result=[]
for fail_val in fail_vals:
result+=fail_rates[fail_val]
return result
시사점 or 새로이 알게된 점
test={"b":4,"c":4,"a":4,"e":5,"d":6}
print(sorted(test.items(), key=lambda x: x[1] ,reverse=True))
# key=lambda를 활용하면 value를 기준으로 정렬하면서 key값의 정렬은 변하지 않게 할 수 있다
# [('d', 6), ('e', 5), ('b', 4), ('c', 4), ('a', 4)]
# sorted(test.items(), key=lambda x: x[1] ,reverse=True)
key 속성을 활용하면 dict의 key or value 중 선택하여 정렬이 가능하다.
728x90
'TIL' 카테고리의 다른 글
[TIL] 230425 사용자 인증 방식 종류와 특징 | Cookies / JWT / OAuth (2) | 2023.04.25 |
---|---|
[TIL] 230424 DRF 세팅 (1) | 2023.04.24 |
[TIL] 230420 gitignore를 무시한 .vscode 폴더 issue (+원인파악완료) (0) | 2023.04.21 |
[TIL] 230419 coroutine & asyncio | pipenv & poetry (0) | 2023.04.20 |
[TIL] 230418 데이터 타입별 메서드 + 프로세스, 스레드 (0) | 2023.04.18 |