알고리즘 문제풀이/프로그래머스
[Seop's의 코드풀이] 프로그래머스 실패율 (2019 KAKAO BLIND RECRUITMENT) - Python
섭섭군
2020. 5. 12. 12:10
반응형
이번에 풀어볼 문제는 프로그래머스에 있는 실패율이라는 문제입니다.
2019년 카카오 블라인드 채용에 나왔던 문제인데요 문제는 다음과 같습니다.
www.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제를 요약하면 다음과 같습니다.
N 개의 스테이지가 존재하고 stages란 배열에 참가자들이 현재 도전중인 스테이지가 주어진다.
현재 도달한 스테이지는 아직 클리어하지 못한 것이다.
각 스테이지마다 실패율 : (스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수)/ (스테이지에 도달한 수)
실패율이 높은 순서대로 스테이지의 번호가 담긴 배열을 출력하라!!
필자는 본 문제를 딕셔너리를 활용해서 풀었습니다.
다음과 같이 딕셔너리에 적재했는데요.
st_dict = {스테이지번호 : [스테이지에 도달한 사람, 도달했으나 클리어하지 못한 사람]}
이런 식으로 딕셔너리에 저장하고 딕셔너리에 있는 정보를 토대로 실패율을 계산했습니다.
전체적인 코드는 다음과 같습니다.
피드백과 질문은 언제나 감사드립니다.
def solution(N, stages):
answer = []
st_dict = dict()
ans_dict = dict()
for i in range(1, N + 1) :
st_dict[i] = [0,0]
ans_dict[i] = 0
# [0] = 스테이지에 도달한 사람 [1] = 도달했으나 클리어하지 못한 사람
for s in stages :
for i in range(1, s ) :
st_dict[i][0] += 1
if s <= N :
st_dict[s][1] += 1
st_dict[s][0] += 1
# 실패율을 계산!!
for k, v in st_dict.items() :
if v[0] == 0 :
ans_dict[k] = 0
else :
ans_dict[k] = v[1]/v[0]
result = list(sorted(ans_dict.items(), key= lambda x: (-x[1], x[0] )))
for i in result :
answer.append(i[0])
return answer
반응형