[이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 실패율

2024. 1. 8. 19:29·코딩테스트/이것이 코딩 테스트다
반응형

< 실패율 >

 

💬 문제 설명

슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다.

이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라.

....

 

  입력(N)   입력(stages)   출력(result)
  5   [ 2, 1, 2, 6, 2, 4, 3, 3 ]   [ 3, 4, 2, 1, 5 ]
  4   [ 4, 4, 4, 4 ,4 ]   [ 4, 1, 2, 3 ]

💬 입력 조건

  • 스테이지의 수 N ( 1 ≤ N ≤ 500 ) 
  • stages의 길이 ( 1 ≤ 길이 ≤ 200,000 ) 
  • stages의 요소 ( 1 ≤ 요소 ≤ N + 1 ) 

💬 출력 조건

  • 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 앞으로
  • 스테이지에 도달한 유저가 없는 경우 해당 스테이지 실패율은 0

✍ 문제요약

N개의 스테이지 중에 플레이어들이 도달한 스테이지의 번호가 주어진다. 각 스테이지 마다의 실패율은 스테이지에 도달했으나 아직 클리어 하지 못한 플레이어수 / 스테이지에 도달한 플레이어 수 이다 실패율이 높은 순서대로 스테이지 번호를 출력하되, 실패율이 동일하면 스테이지 번호가 작은것이 앞으로 오도록 하여라.

💯 문제링크

프로그래머스의 "실패율"와 동일한 문제이다.

https://school.programmers.co.kr/learn/courses/30/lessons/42889?language=python3

 

프로그래머스

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

programmers.co.kr


✅  문제 풀이

  • 각 스테이지의 인원을 기록할 카운팅 배열(stop)을 만들어준다.
  • 카운팅 배열을 for문으로 1번 스테이지 부터 N번 스테이지 까지의 실패율을 계산한다.
    • 실패율 => i 번 배열의 값( i번 스테이지 도착 플레이어 수) / 남은 플레이어의 수 
    • 실패율과 스테이지를 한 쌍으로 배열에 추가한다
    • 남은 플레이어 수에서 i번 스테이지의 플레이어 수를 제외하고 i + 1을 반복한다.
  • 이미 낮은 스테이지부터 확인을 했기 때문에, 실패율에 대해서만 오름차순 정렬해 주면 된다.
def solution(N, stages):
    stop = [0] * (N + 2)
    for stage in stages: stop[stage] += 1
    
    fail = []
    player = len(stages)
    for i in range(1, N+1):
        if player == 0 : fail.append((0,i)) ; continue
        fail.append(((stop[i] / player),i))
        player -= stop[i]
        
    fail.sort(key = lambda x:-x[0])
    
    return [stage for _,stage in fail]
반응형

'코딩테스트 > 이것이 코딩 테스트다' 카테고리의 다른 글

[이것이 코딩 테스트다 with Python] Chapter 15. 이진탐색 - 정렬된 배열에서 특정 수의 개수 구하기  (0) 2024.01.10
[이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 카드 정렬하기  (0) 2024.01.09
[이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 안테나  (0) 2024.01.06
[이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 국영수  (0) 2024.01.05
[이것이 코딩 테스트다 with Python] Chapter 13. DFS/BFS - 블록 이동하기  (0) 2024.01.04
'코딩테스트/이것이 코딩 테스트다' 카테고리의 다른 글
  • [이것이 코딩 테스트다 with Python] Chapter 15. 이진탐색 - 정렬된 배열에서 특정 수의 개수 구하기
  • [이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 카드 정렬하기
  • [이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 안테나
  • [이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 국영수
hyo_nu
hyo_nu
Annoying Orange Developer
  • hyo_nu
    AOD
    hyo_nu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 코딩테스트
        • 이것이 코딩 테스트다
        • 알고리즘
      • Style Sheet
        • CSS
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • Github
    • Velog
  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    그리기
    코딩
    Algorithm
    이것이 취업을 위한 코딩테스트다
    이진탐색
    코딩테스트다
    BFS
    정렬
    구현
    dfs
    취업
    dp
    브루트포스
    그리디
    코딩테스트
    python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hyo_nu
[이것이 코딩 테스트다 with Python] Chapter 14. 정렬 - 실패율
상단으로

티스토리툴바