눈송이의 개발생활

[Programmers Lv.1]실패율 (Python) 본문

Algorithm/Programmers

[Programmers Lv.1]실패율 (Python)

꾸지새미언니

문제

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

내 코드 

def solution(N, stages):
    answer = {}
    stages.sort()
    for i in range(1, N + 1):
    	# 스테이지 성공 사람 수 
        c = stages.count(i)
        if c == 0:
            answer[i] = 0
        # 스테이지 성공한 사람 수 / 스테이지 모든 사람 수 
        else:
            answer[i] = c / len(stages)
        # 성공한 사람만큼 앞에서부터 stack에서 없애기 
        for _ in range(c):
            stages.pop(0)
        
        # 딕셔너리 정렬하기
        st = dict(sorted(answer.items(), key=lambda item: item[1], reverse=True))

    return list(st.keys())

다른 사람 풀이 

def solution(N, stages):
    result = {}
    denominator = len(stages)
    for stage in range(1, N+1):
        if denominator != 0:
            count = stages.count(stage)
            result[stage] = count / denominator
            denominator -= count
        else:
            result[stage] = 0

    return sorted(result, key=lambda x : result[x], reverse=True)

해결 방법

스테이지의 번호와 각 스테이지의 실패율을 연결하기 위해서 dictionary를 사용했다. 

key = 스테이지 번호, value = 각 스테이지의 실패율 

나는 stages에서 이미 본 스테이지를 없애기 위해 정렬하고, pop해서 필요한 숫자들만 stages에 남겨두었다. 

실패율을 계산해서 사전에 넣은 다음에, value의 값으로 비교해서 사전 내의 원소들을 내림차순으로 정리했다. 

이후 스테이지 번호인 key만 따로 출력해주었다. 

 

다른 사람의 풀이를 보고 많이 배웠다... 

일단 매번 len(stages)를 해줄 필요가 없다는 것. 그리고 stage의 길이가 0일때와 아닐 때를 나눠서 보는 것. 

 

list.count(원소) : list에서 원소의 개수를 return하는 함수 

sorted(answer.items(), key=lambda item: item[1], reverse=True) : dictionary의 item들을 value를 기준으로 내림차순 정리하기. (item[0] → key기준으로 정렬. reverse=True → 내림차순. lambda →정렬을 목적으로 하는 함수

lambda x : result[x] : 매개변수 : 표현식 

dict.keys() : dict_keys() 객체로 반환하기 때문에 list로 형변환 해주어야 함. 

Comments