본문 바로가기
Algorithm/programmers

programmers 실패율

by 갈잃자 2022. 8. 10.

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

댓글