본문 바로가기
알고리즘/Python

[프로그래머스] 파이썬 - 실패율

by 조이은 2023. 7. 19.

https://school.programmers.co.kr/learn/courses/30/lessons/42889

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2019 KAKAO BLIND RECRUITMENT

Level 1. 실패율

 

접근 방식
1. stage 배열을 오름차순으로 정렬한다.
2. stage 배열을 돌면서, 스테이지와 해당 스테이지의 실패율을 딕셔너리에 저장한다.
3. 스테이지에 도달한 유저가 없는 스테이지에서는 해당 스테이지의 실패율을 0으로 저장한다.
4. 실패율을 기준으로 딕셔너리를 정렬한다.

 

▶ 코드

def solution(N, stages) : 
    answer = []
    
    dic = {}
    
    #스테이지 정렬
    stages.sort()
    for i in range(len(stages)) :
        if len(stages) == 0 :
            break
        
        k = stages[0]
        
        # N 넘어서는 스테이지는 무시한다
        if k > N :
            tmp = []
            tmp.append(k)
            stages = [i for i in stages if i not in tmp]
            continue
        
        #스테이지 번호와 실패율을 딕셔너리에 저장
        dic[k] = stages.count(k)/len(stages)
        
        #현 스테이지 실패율 모두 저장해놨으니 현 스테이지는 모두 삭제
        tmp = []
        tmp.append(k)        
        stages = [i for i in stages if i not in tmp]
        
    #스테이지에 도달한 유저 없는 스테이지의 실패율을 0으로 저장    
    for i in range(1, N+1) :
        if i not in dic :
            dic[i] = 0
    
    #실패율(value) 값 기준으로 내림차순 정렬
    answer.append(sorted(dic, key=lambda x: dic[x], reverse = True))
    answer = sum(answer , [])
    return answer

print(solution(N, stages))

 

처음에는 각 스테이지 카운트를 세아려서 해보려고 했었는데 쓸데없이 길어질 것 같아서 이 방법으로 바꾸어봤다.

또... 한번 틀렸었는데, 그것은 그냥 for문의 범위를 잘못 설정했었다. 테스트 케이스 여러 개 고려해보다 보니까 실수를 깨달아서 고칠 수 있었음!