[programmers] 실패율 (2019 카카오 블라인드 채용)
resilient
·2021. 9. 4. 21:44
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42889
- 먼저 이문제는 최대 입력값을 확인한 뒤 DP 아니면 딕셔너리로 풀어야 시간 초과가 나지 않겠구나 라고 생각했다.
- stages라는 리스트에 담긴 데이터들을 Counter라는 딕셔너리에 각 원소들 개수를 카운트에서 key와 value로 나타내고, 이때 0부터 주어진 N(stage개수)까지의 stage에 도달한 사람이 없을 경우 딕셔너리를 채우기 위해 value값을 0으로 설정해준다.
- 어쨌든 실패율을 구하려면 해당 스테이지를 통과한 인원들을 구해야 하므로 Counter딕셔너리의 key값들을 for문을 돌리면서 N보다 작고, 해당 key값의 value가 0이 아니면 해당 stage에 있는 사람을 제외한 인원수를 더해서 실패율을 구하게 했다.
- 실패율을 fail_percentage라는 딕셔너리에 계산해서 value값으로 넣어주고 value값을 기준으로 내림차순 정렬해서 순서대로 key값을 return 시켜주면 된다.
def solution(n,stages):
Counter = {}
# n이 COunter에 없을 경우를 고려해주기 위해
# 일단 n까지의 key 값에 value를 0으로 초기화해준다.
for i in range(n):
Counter[i+1] = 0
# 여기서 stages리스트에 주어진 값으로 Counter 딕셔너리를 갱신해준다.
for i in stages:
if i <=n:
if i not in Counter:
Counter[i] = 0
Counter[i] += 1
# 실패율을 구해주기 위한 총 인원수
user = len(stages)
# 실패율을 담을 딕셔너리
fail_percentage = {}
for i in Counter.keys():
# 스테이지는 n개이고 n+1(모든스테이지통과했을경우)를 고려해준다.
if i <=n:
# 이부분 중요!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# Counter값이 0일경우 0을 나눌수가 없으므로 인덱스 에러가 발생할 수 있다.
if Counter[i] == 0:
fail_percentage[i] = 0
else:
fail_percentage[i] = Counter[i]/user
# 나중에 for문으로 자기보다 낮은 스테이지를 통과한 인원수는
# 제외시킨다.
user -= Counter[i]
# value값(실패율) 을 기준으로 내림차순 정렬해주고
fail_percentage = dict(sorted(fail_percentage.items(),key = lambda x: x[1],reverse=True))
# 리스트형식으로 정렬된 데이터의 key값만 출력하면된다.
answer = list(fail_percentage.keys())
return answer
반응형
'자료구조 & 알고리즘 > 프로그래머스(programmers)' 카테고리의 다른 글
[programmers] 단어 변환 (0) | 2022.01.30 |
---|---|
[programmers] 순위 검색 (2021 카카오 블라인드 채용) (0) | 2021.12.17 |
[programmers] 보석 쇼핑 (2020 카카오 인턴십) (1) | 2021.09.03 |
[programmers ] 캐시 (2018 카카오 블라인드 채용) (0) | 2021.09.01 |
[programmers] 뉴스클러스터링(2018 카카오 블라인드 채용) (0) | 2021.08.30 |