https://school.programmers.co.kr/learn/courses/30/lessons/42889?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제는 해당 스테이지에 실패한 사람들의 명수(내 코드에선 fail)와 해당 스테이지까지 도달했던 사람들(내 코드에선 cnt)를
비교하여 해당 스테이지에 대한 실패율을 구하는 문제이다(fail/cnt)
문제를 보기 좋게 이해하기 위해 실패율과 stage를 하나의 리스트에 묶었고, ([fail/cnt, stage]) (stage는 N에 대한 인덱스를 뜻함)
stage별로 묶에 sort하면 끝.
추가로 실패율이 0인 경우가 있는데.. 단순히 모두가 통과한 케이스가 아닌, stage에 전혀 도달을 하지 못한 경우가 있다.
(예를들어 0/0의 경우)
이경우는 실패율을 (0/1)로 만들어, zerodivisionerror에러를 막을 수 있었다.
def solution(N, stages):
stages.sort(reverse=True) # 시간을 줄이기 위해 내림차순으로 sort 시킴
answer = []
arr = []
cnt = 0 # 해당 스테이지를 거친사람들을 count 해줌
for i in range(N,0,-1): #stage단계도 내림차순으로 찾아보기
stage=i
fail = 0 # 해당 스테이지에서 넘어가지 못하고 남아있는 사람
for j in range(cnt,len(stages)): # 시간단축을 위해 기존에 세었던 사람들부터 세기 시작하면됨!
if stages[j] >=stage:
cnt+=1
if stages[j] ==stage:
fail +=1
if stages[j] < stage:
if cnt ==0: # 해당 스테이지에 도달한 사람이 0명이라면, 0/0이 성립되지 않으므로
cnt = 1 # 1명으로 부여해줌
break
arr.append([fail/cnt,stage]) #실패율과, 스테이지를 list로 묶어줌
#
arr.sort(key=lambda x: x[0]) #실패율로 sort해줌
#
for i in range(len(arr)):
answer.append(arr[i][1]) #스테이지만 따로 모아서
answer.reverse() # reverse하여 내림차순 시켜줌
return answer
'Algorithm > programmers' 카테고리의 다른 글
programmers 다트 게임 (0) | 2022.08.13 |
---|---|
programmers 비밀지도 (0) | 2022.08.12 |
programmers 크레인 인형뽑기 게임 (0) | 2022.08.09 |
programmers 키패드누르기 (1) | 2022.08.03 |
programmers 숫자 문자열과 영단어 (0) | 2022.08.02 |
댓글