프로그래머스 2019 카카오 - 실패율
문제 이름위에 있는 색깔이 레벨이였다!!! 지금알았네..
연한 파란색 - Level 1
진한 파란색 - Level 2
보라색 - Level 3
빨간색 - Level 4
문제
입력
(5, [2, 1, 2, 6, 2, 4, 3, 3])
스테이지 갯수인 N과 사용자가
어느 stage에 도달한지를 알려주는 stages list를 입력으로 받는다.
출력
[3,4,2,1,5]
stage별로
스테이지에 도달했으나 클리어 못한사람/ 스테이지에 도달한 플레이어 수
(문제에서 실패율이라고 한다)
의 오름차순을 스테이지 번호로 출력
스테이지에 도달한 유저가 없으면 실패율을 0으로 하고 실패율이 같은 스테이지가 있다면 작은 번호의 스테이가 먼저!!
해결법
우선 N+1의 길이의 리스트를 2개 만들어준다.
(스테이지에 도달했으나 클리어못한 / 스테이지에 도달한 플레이어수 2개의 리스트)
스테이지에 도달했으나 클리어 하지 못한 list는 stages의 원소 값이기 때문에 index만 신경써서 for 문으로 stages를 읽어서 더해주면 된다.
스테이지에 도달한 플레이어수는 스테이지에 도달했으나 클리어 못한 지점까지 전부 +1 해주면 된다.
예시로 stages의 첫번째 원소가 3인데 3번째 스테이지에서 클리어 하지 못하고 있는 것이다. 따라서 1,2,3 스테이지는 모두 도달했기때문에 index를 맞춰서 +1 해주면된다.
아 여기서 N+1길이의 리스트를 만든것은 스테이지를 모두 클리어하면 스테이지 숫자보다 1크기 때문이다.
이제 두 리스트 값을 나눠주면서 index값과 실패율 값을 원소로 가지고 있는 list를 만들어준다.
중요 !! 나눌때 값이 0이면 실패율은 0이다!!!
나누는 값이 0 이면 문제 풀이할때 오류가 뜬다.
따라서 index값과 실패율의 값이 저장된 list를 실패율로 정렬한다.
sort(key = lambda x:x[1] ,reverse =True 사용
2번째 원소로(index는 1) 정렬/ 오름차순으로
그리고 출력하면 끝!
def solution(N, stages):
answer = []
answer_list = []
real_answer = []
done = [0] * (N + 1)
not_done = [0] * (N + 1)
for i in stages:
not_done[i - 1] += 1
for j in range(i):
done[j] += 1
for i in range(N):
if done[i] == 0:
answer_list.append([i, 0])
else:
answer_list.append([i, not_done[i] / done[i]])
answer_list.sort(key=lambda x: x[1], reverse=True)
for i in answer_list:
real_answer.append(i[0] + 1)
print(real_answer)
return real_answer
중간에 0으로 나눠주는거 때문에 에러가 났었던 문제
언제나 나누기가 있을땐 조심하자!!!!!
Author And Source
이 문제에 관하여(프로그래머스 2019 카카오 - 실패율), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jhlsuper/프로그래머스-2019-카카오-실패율저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)