반응형
< 실패율 >
💬 문제 설명
슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다.
이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라.
....
| 입력(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 |
