카카오 블라인드 리크루트먼트 문제이다:
def solution(N, stages):
stage_result = []
for i in range(1, N+1):
stage_finished = len([j for j in stages if j > i])
on_stage = stages.count(i)
if on_stage == 0:
failed = 0
else:
failed = on_stage/(on_stage+stage_finished)
if stage_finished == 0:
failed = 1
stage_result.append([i, failed])
return [k[0] for k in sorted(stage_result, key=lambda x: x[1], reverse=True)]
카카오 문제 답게 상당히 긴 시간이 필요했다. 푼 방식은 다음과 같다:
- stage_result라는 빈 배열을 정의한다.
- 1 부터 N까지의 숫자들 중에서,
stages
배열에 있는 i보다 더 큰 수들을 세어주고, 이를stage_finished
라고 정의한다. on_stage
는stage
에 존재하는 i의 개수를 저장해준다.- 만약
on_stage
값이 0이라면, 실패율failed
는 0으로 정의해준다. 이를 해주는 이유는 실패율을구하는 문제에서,스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
가 0이면서도스테이지에 도달한 플레이어 수
도 0이어서,ZeroDivisionError
이 뜰 수도 있기 때문이다. - 만약
on_stage
값이 0이 아니라면, 정상적으로 실패율 계산을 돌려주고, 이때 만약stage_finished
값이 0이라면 실패율은 1로 정의한다. - 마지막으로
stage_result
배열에 해당 숫자와 실패율을 담은 배열을 append해주고, 문제의 형식에 알맞게 출력하기 위해sorted()
와lambda
함수를 사용해준다.
역시 카카오 블라인드 문제 답게 어려웠다. 까딱하면 런타임에러가 뜨고, 이를 찾기 위해 많은 시간을 보냈어야 했다.
'알고리즘 테스트 > 프로그래머스 문제풀이 및 해설' 카테고리의 다른 글
<프로그래머스 문제풀이: 스킬트리> Level 2 - 파이썬 (0) | 2020.12.04 |
---|---|
<프로그래머스 문제풀이: [1차] 다트> Level 1 - 파이썬 (0) | 2020.12.03 |
<프로그래머스 문제풀이: [1차] 비밀지도> Level 1 - 파이썬 (0) | 2020.12.01 |
<프로그래머스 문제풀이: 예산> Level 1 - 파이썬 (0) | 2020.11.30 |
<프로그래머스 문제풀이: 직사각형 별찍기> Level 1 - 파이썬 (0) | 2020.11.29 |