티스토리 뷰

문제출처 - https://programmers.co.kr/learn/courses/30/lessons/42889

 

프로그래머스

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

programmers.co.kr

def solution(N, stages):
    fail = [[0, idx] for idx in range(N + 1)]  # [실패율, 스테이지 번호]
    stages.sort()

    temp = stages[0]
    cnt = 1
    for i in range(1, len(stages)):
        if temp != stages[i]:
            fail[temp] = [cnt / (len(stages) - i + cnt), temp]
            temp = stages[i]
            cnt = 1
        else:
            cnt += 1

    # 맨 마지막꺼 추가
    if cnt != 1 and temp <= N:
        fail[temp] = [cnt / (len(stages) - i - 1 + cnt), temp]

    fail.pop(0)  # idx=0 인거 지워버리기
    fail = sorted(fail, key=lambda x: -x[0])

    answer = [f[1] for f in fail]
    return answer

설명

 

fail이라는 배열을 만들어 [실패율, 스테이지 번호]에 초기값으로 실패율은 0, 번호는 idx 순으로 넣어줬다.

 

stages 배열은 처음에 정렬해주고 반복문을 돌린다.

(stages 정렬을 안하고 list의 count 함수를 써도 될 것 같다..?)

 

반복문을 돌면서 같은 스테이지가 나오면 cnt를 올려주고 다른 스테이지가 나오면 실패율을 계산해 fail 배열의 값을 바꿔준다.

 

테스트케이스 2번 같은 경우(N = 4, stages = [4, 4, 4, 4, 4])

반복문 안에서 스테이지 4의 실패율이 계산되지 않기 때문에 나중에 따로 계산해줬다. 

 

fail 리스트는 실패율 기준 내림차순, 번호 기준 오름차순으로 정렬된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함