본문 바로가기
프로그래머스/Python

[프로그래머스] 실패율 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 8. 1.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

해당 문제는 각 스테이지 별로 실패하는 사람의 수를 세어 현재 스테이지 별 남은 사람의 수를 나눠주면 실패율을 구할 수 있다. 구한 실패율을 각각 저장하고 실패율을 기준으로 내림차순으로 정렬하여 해당 스테이지 번호를 출력하면 된다.

 

  1. 처음 사용자의 수를 저장한다. size = len(stages)
  2. 각 스테이지별로 실패율을 저장할 딕셔너리를 생성한다. d = {}
  3. 각 스테이지 번호를 하나씩 지정하여 for i in range(1, N + 1)
  4. 만약 해당 스테이지를 실패하는 사람이 없다면 if (stages.count(i) == 0)
  5. 해당 스테이지의 실패율을 0으로 저장한다. d[i] = 0
  6. 그리고 다음 스테이지로 넘어간다. continue
  7. 해당 스테이지를 실패하는 사람이 있다면 해당 스테이지의 실패율은 실패하는 사람의 수를 전체 사람의 수로 나눈 값이고 구한 실패율을 저장한다. d[i] = stages.count(i) / size
  8. 실패하는 사람이 생겼으므로 다음 스테이지에는 실패한 사람을 제외한 나머지 사람이 갈 수 있게 된다. 따라서 다음 스테이지에 가는 전체 사람의 수를 변경해 준다. size -= stages.count(i)
  9. 모든 스테이지별 실패율을 구했다면 실패율을 기준으로 내림차순 정렬한다. d = sorted(d.items(), key=lambda x: x[1], reverse=True)
  10. 내림차순 정렬한 결과를 하나씩 추출하여 for i in d
  11. 해당 스테이지 번호를 정답 리스트에 추가한다. answer.append(i[0])
반응형

3. 소스코드

def solution(N, stages):
    answer = []

    size = len(stages)
    d = {}
    for i in range(1, N + 1):
        if (stages.count(i) == 0):
            d[i] = 0
            continue

        d[i] = stages.count(i) / size
        size -= stages.count(i)

    d = sorted(d.items(), key=lambda x: x[1], reverse=True)
    for i in d:
        answer.append(i[0])

    return answer
728x90
반응형