Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 액세스토큰
- 도커
- 국제화
- java
- 토이프로젝트
- springsecurityoauth2client
- 프로그래머스
- 리프레시토큰
- 파이썬
- yaml-resource-bundle
- githubactions
- 트랜잭션
- springdataredis
- springsecurity
- 스프링시큐리티
- oauth2
- 백준
- docker
- 오블완
- AWS
- CI/CD
- JIRA
- 스프링
- 티스토리챌린지
- 재갱신
- 소셜로그인
- 메시지
- 데이터베이스
- Spring
- 스프링부트
Archives
- Today
- Total
땃쥐네
[Programmers] [042889] [Python] 실패율 본문
문제
- 플랫폼 : 프로그래머스
- 번호 : 042889
- 제목 : 실패율 (2019 KAKAO BLIND RECRUITMENT 출제)
- 난이도 : Level 1
- 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때,
실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성 - 문제 : 링크
필요 지식
- Counter 사용
- 정렬
풀이
from collections import Counter
from typing import List
def solution(n: int, stages: List[int]):
results = [[i, 0, 0] for i in range(0, n + 2)]
for key, count in Counter(stages).items():
results[key][1] += count
for before in range(1, key + 1):
results[before][2] += count
return list(map(lambda x: x[0], sorted(results[1:-1], key=lambda x: (-x[1] / x[2] if x[2] != 0 else 0, x[0]))))
- 0번(없지만 편의상 삽입), 1번, 2번, ..., n+1번 스테이지의 상태를 기록하는 results 배열 정의
- 각 인덱스에는 배열이 하나 담긴다.
- 0번 인덱스 : 스테이지 번호
- 1번 인덱스 : 잔류자 수
- 2번 인덱스 : 도달자 수
- Counter를 통해 스테이지별 각 잔류자 수를 맵으로 얻어온다.
- 잔류자 수만큼 results의 해당 스테이지 잔류자 수를 증가시키고, 그 이전 스테이지들에 도달자 수를 누적한다.
- results를 실패율로 내림차순 정렬한다. 이 때 도달자 수가 0이면 실패율을 0으로 취급하고, 같다면 스테이지 번호 순으로 오름차순 정렬한다.
(이 부분이 이 문제에서 좀 까다로웠던 것 같다.) - 정렬 결과를 각 스테이지 번호로 변경해주고, 리스트로 반환한다.
결과
- 0.03ms ~ 30.13ms 소요
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] [131128] [Python] 숫자 짝꿍 (0) | 2023.02.02 |
---|---|
[Programmers] [012926] [Python] 시저 암호 (0) | 2023.01.21 |
[Programmers] [077884] [Python] 약수의 개수와 덧셈 (0) | 2023.01.20 |
[Programmers] [120890] 가까운 수 (0) | 2023.01.18 |
[Programmers] [Java] [120866] 안전지대 (0) | 2023.01.17 |
Comments