영아일지

[프로그래머스 kakao] level 1 - 실패율 본문

디지털/코딩테스트

[프로그래머스 kakao] level 1 - 실패율

영아일지 2023. 5. 30. 11:12

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

 

프로그래머스

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

programmers.co.kr

[내 풀이]

1. 스테이지를 1~N까지 올리며 해당 스테이지에 있는지에 대한 여부를 판단한다

2. result라는 딕셔너리로 스테이지, 실패율을 저장한다 

3. sort함수로 실패율 순으로 정렬하고 key값만 추출한다

 

**이때 total이 0인 경우를 생각을 못해서 처음에 런타임 에러가 났었다. 예외인 경우도 꼭 생각해볼 것!

def solution(N, stages):
    stages = [0]+stages #번호 맞추기 위함
    result = {}
    total = len(stages)-1
    for i in range(1, N+1): #i번 스테이지
        fail = 0
        if total != 0:
            for j in range(len(stages)):
                if stages[j] == i:
                    fail += 1
            fail_rate = fail/total #실패율
            result[i] = fail_rate
            total -= fail
        else:
            result[i] = 0

    result = sorted(result.items(), key=lambda x:(-x[1], x[0]))
    ans = []
    for a in range(N):
        ans.append(result[a][0])
    return ans

[다른 사람 풀이]

    result = sorted(result.items(), key=lambda x:(-x[1], x[0]))
    ans = []
    for a in range(N):
        ans.append(result[a][0])

위의 풀이 대신 밑으로도 정렬을 간결하게 해결가능하다! 

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