[알고리즘] 프로그래머스 실패율

hoya.a·2022년 6월 15일
0

알고리즘

목록 보기
9/10
post-thumbnail

내가푼 풀이

def solution(N, stages):
    answer = []
    # 총 사용자 수
    total = len(stages)
    fails = []

    # 각각의 stage에 몇명의 사용자가 있는지 리스트로 나타낸다. 초기값은 0으로 설정. N+1 스테이지 까지 있다.
    users = [0 for _ in range(N+1)]
    for s in stages:
        # users 안의 요소는 각 스테이지마다 클리어중인사람 명수
        users[s-1] += 1

    # i 는 각 스테이지 번호
    for i in range(N):
        if users[i] == 0:
            fails.append((i+1, 0))

        # 실패율, 반환해야 하는 값은 스테이지 번호이기 때문에 튜플로 묶었다.
        # stages 는 1 이상 N+1 이하 이므로 for 문은 0,1,2,.. 이렇게 가니까 +1 해줌
        else:
            fails.append((i+1, users[i]/total))
            total -= users[i]

    sort = sorted(fails, key=lambda x: x[1], reverse = True)

    for i in sort:
        answer.append(i[0])

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

몰랐던 파이썬 문법 정리

for문

1) [(초기값) for _ in range(n)] -> [0, 0, 0, 0, 0, ··· n개 만큼] 이라는 뜻이다

2) for i in list -> list 안의 원소가 한개씩 나온다.

lambda

  • lambda 인자리스트: 표현식
    ex) a = [1, 2, 3, 4]
    list(map(lambda x: x*2))
    = [1, 4, 9, 16]

count

  • 문자열 안에서 찾고 싶은 문자의 개수를 찾을 수 있다.
    ex) 'ooyyy'.count('y')
    = 3
profile
TIL 정리

0개의 댓글