코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.

코딩테스트 정보

  • 프로그래머스
  • 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 : 역정렬 (실패율이 높은 순으로)