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

[이코테] 실패율

by 데브겸 2023. 2. 12.

뭔가 알 것 같은데 못 푸는 느낌

 

1. 내 풀이

ㅋㅋㅋㅋ 그냥 못 푼 풀이

def solution(N, stages):
    count_sort = [0] * (N+1)
    for i in range(0, stages):
        stages[0] 
    tmp = sorted(stages)
    for i in range(1, N+1):
        
    answer = []
    return answer

1-1. 풀이 도중 생각

1) 실패율 = (해당 스테이지에 머물러 있는 사람) / (해당 스테이지에 있는 사람 + 그 이상에 있는 사람)

2) 스테이지를 인덱스로 가지는 계수 정렬이 필요하려나?

3) 낮은 순으로 정렬한 다음에 분수 계산 하면 될 것 같은데 그걸 어떻게 해야는지 감이 안 잡히네

 

2. 정답

Hr.... count()라는 함수가 있는지 알았다면 조금 더 잘 풀 수 있었을 것 같은데 아쉽다

def solution(N, stages):
    answer = []
    length = len(stages)
    
    # 스테이지 번호를 1부터 N까지 증가시키며
    for i in range(1, N+1):
        # 해당 스테이지에 머물러 있는 사람 수 계산
        count = stages.count(i)
        
        # 실패율 계산
        if length == 0:
            fail = 0
        else:
            fail = count / length
        
        # 리스트에 (스테이지 번호, 실패율) 원소 삽입
        answer.append((i, fail))
        # length 조정
        length -= count
        
    # 실패율을 기준으로 각 스테이지를 내림차순 정렬
    answer = sorted(answer, key = lambda t: t[1], reverse=True)
    
    # 스테이지 번호만 출력
    answer = [i[0] for i in answer]
    return answer

 

# 조금 더 간결한 버전의 풀이

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.keys(), key=lambda x : result[x], reverse=True)

sorted에 dictionary인 result를 그냥 넘기면 keys가 반환, keys는 생략이 가능하다는데 신기방기

 

 

3. 새로 알게 된 것 or 새삼 다시 알게 된 것

1) count() 함수의 존재여부. 찾고 싶은 문자의 개수 혹은 숫자의 개수를 찾아준다 '변수.count()'로 사용가능

튜플, 리스트, 집합과 같은 iterable 자료형에서도 사용가능하지만, dictionary, set에서는 사용 불가함

2) dictionary에서 value를 기준으로 정렬할 때 lambda x: item[x]와 같은 형식으로 가능