코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.
코딩테스트 정보
- 프로그래머스
- python
- level 1
- 점수 : 캡쳐 못함
- 문제 링크
문제
문제 링크 참고
풀이 코드
풀이 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def solution(N, stages):
# 스테이지별로 실패한 사람 숫자를 dictionary 형태로 저장
stages_fail = { i+1 : stages.count(i+1) for i in range(N) }
stages_failratio = {}
sum_clear = 0
# 스테이지별로 실패율을 dictionary 형태로 저장
for i in range(N):
if stages.count(i+1) >= 1:
stages_failratio[i+1] = stages_fail[i+1] / (len(stages)-sum_clear)
sum_clear += stages_fail[i+1]
else:
stages_failratio[i+1] = 0
# dictionary의 value를 기준으로 sort
answer = sorted(stages_failratio.items(), key= lambda x:x[1], reverse=True)
answer = [x[0] for x in answer]
return answer
풀이 방식
■■■■ 접근 방식 ■■■■
dictionary 형태로 스테이지별 실패율을 저장
lambda 함수를 사용해 value를 기준으로 dictionary 정렬
■■■■ 핵심 계산식 서술 ■■■■ (1번 풀이 기준)
(1) 실패한 사람 숫자와 실패율을 스테이지별로 dictionary 형태로 저장
1
2
stages_fail = { i+1 : stages.count(i+1) for i in range(N)}
stages_failratio = { i+1 : stages_fail[i+1] / (len(stages)-sum_clear)}
(2) lambda 함수를 이용해 dictionary 정렬
1
2
3
4
5
6
anser = sorted(stages_failratio.items(), key= lambda x:x[1], reverse=True)
# stages_failratio.items() : stage_failratio 딕셔너리의 키값과 밸류값을 [(튜플)] 형태로 반환
# sorted(func, key=lambda x:x[1]) : 람다함수를 통해 x[1] (=튜플 내 밸류값 위치) 로 정렬
# reverse = True : 역정렬 (실패율이 높은 순으로)