본문 바로가기

알고리즘/프로그래머스

2019 카카오 코딩테스트 기출 - 실패율 , 파이썬

1. 문제 

- 이번 문제 역시 매우 쉬운 편으로 문제 요구사항을 구현하면 된다. 

 

2. 풀이 

 

- 여러가지 풀이가 있겠지만 아래 풀이는 좀 지저분한편

- stages 배열을 순회하며 각 스테이지에 몇 명 도달했고 몇 명 멈춰있는지 저장

- 실패율을 계산하고 0으로 나누지 않도록 주의(문제에 명시되어있음)

- 사실 가장 어려운 부분은 정렬인데 실패율은 내림차순으로, 실패율이 같은 경우는 오름차순으로 정렬해야한다. 

 

* 참고

1) 파이썬 다중정렬

비교할 아이템의 요소가 복수 개일 경우, 튜플로 그 순서를 내보내주면 된다.
ex. sorted(e, key = lambda x : (x[0], -x[1]))
-를 붙이면, 현재 정렬차순과 반대로 하게 된다.

2) 람다(Lambda)

lambda 인자 : 표현식

def sum(a, b) :
	return a + b
   
>> sum(1, 2)
3

>> (lambda a, b: a + b)(1, 2)
3

3. 코드

from collections import defaultdict

def solution(N, stages):
    answer = []
    total = defaultdict(int)
    cur = defaultdict(int)
    temp = []
    for n in stages : 
        for i in range(1, n+1) :
            total[i] += 1
        cur[n] += 1
    for i in range(1, N+1) :
        if total[i] != 0 :
            temp.append([cur[i]/total[i], i])
        else :
            temp.append([0, i])
    temp.sort(key = lambda x : (-x[0], x[1]))
    for order in temp :
        answer.append(order[1])
    return answer

4. 개선

- 전반적으로 지저분

- 나중에 돌아와서 고치자 ^^