프로그래머스 2019 카카오 - 실패율

Jamwon·2021년 7월 4일
0

알고리즘

목록 보기
13/18
post-thumbnail

문제 링크


문제 이름위에 있는 색깔이 레벨이였다!!! 지금알았네..
연한 파란색 - 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으로 나눠주는거 때문에 에러가 났었던 문제

언제나 나누기가 있을땐 조심하자!!!!!

profile
한걸음씩 위로 자유롭게

0개의 댓글