https://school.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
각 스테이지의 실패율을 계산한후에 실패율이 높은 스테이지 부터 내림차순으로 정렬한 배열을 리턴하라
이때 실패율 = (스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수) 이다.
입력
스테이지 개수 N = (1 <= N <= 500) , stages len = (1 <= len(stages) <= 200000) , stages 원소 e = (1 <= e <= N+1)
출력
내림차순 정렬된 실패율 리스트
풀이
각 스테이지의 실패율 = 도달후 못푼 수 / 도달한 수 이므로
도달후 못푼 스테이지 는 입력 배열에서 주어진 체류중인 스테이지 번호이다. 따라서 해당번호의 개수를 구하면된다.
도달한 스테이지는 입력 배열 원소값 스테이지의 아래값들모두 이므로 해당 번호들의 개수를 더해주면된다.
각 배열을 구한후 해당 식을 적용해 풀면 각 스테이지의 실패율이나오게된다.
해당 실패율과 스테이지 번호를 pair 하여 정렬을 한후 스테이지 번호를 답으로 저장하여 리턴하면된다.
def solution(N, stages):
approach = [0 for i in range(N+1)] # 도달한 스테이지들의 개수를 저장하기위한 배열
notyet = [0 for i in range(N+1)] # 도달했지만 클리어하지못한 스테이지들의 개수를 저장하기위한 배열
res = [] # 실패율 저장 리스트 선언
for stage in stages:
for i in range(stage): # stages 배열의 원소 값 아래의 스테이지들 즉 이미도달한 스테이지들을
approach[i] += 1 # 1씩 더해준다.
notyet[stage-1] += 1 # 배열의 원소 값 즉 도달했지만 클리어하지못한 스테이지의 인덱스에 개수를 더해준다.
for i in range(N):
if approach[i] == 0: # 제약 조건에 approach 가 0 일경우 실패율은 0이다.
res.append(0)
continue
a = notyet[i] / approach[i] # 실패율 적용
res.append(a) # 각 스테이지들의 실패율 추가
dicres = {i+1 : res[i] for i in range(len(res))} # 딕셔너리 형식으로 인덱스와 값을 페어한다.
res2 = sorted(dicres.items(), key = lambda item: item[1],reverse=True) # 정렬한다.
answer = [i[0] for i in res2] # 정렬된 인덱스를 리턴
return answer # 정답 리턴
'알고리즘' 카테고리의 다른 글
프로그래머스/올바른 괄호/py (0) | 2022.08.17 |
---|---|
프로그래머스/신규 아이디 추천/py (0) | 2022.08.17 |
프로그래머스/직사각형 별찍기/cpp (0) | 2022.08.14 |
프로그래머스 같은 숫자는 싫어 cpp (0) | 2022.08.14 |
프로그래머스/최소직사각형/cpp (0) | 2022.08.11 |