[프로그래머스/Python] 2019 KAKAO BLIND RECRUITMEN 실패율

PhilAI·2023년 9월 16일
0

📌 문제

https://school.programmers.co.kr/learn/courses/30/lessons/161989

📌 풀이

풀이 1 - (1,6,7,9,13,23~25번 테스트 케이스 실패)

  1. 각 stage에 머무는 사람의 수를 세린다. (Counter 함수 사용)
  2. 1~N번와 임의의 숫자를 넣어 이중리스트를 만든다 (ex. [[1,0],[2,0],[3,0] ..] 0이라는 임의의 숫자는 실패율을 넣을 예정이다.
  3. 처음 시작하는 인원의 수는 stage의 길이 수와 동일하다
  4. for문을 돌려 각 stage별(1단계,2단계, ... N) 실패율을 계산한다. (여기서 굳이 N의 실패율을 구하지 않아도 된다. N에 있다는 것은 이미 모든 판을 깨고 성공사람을 의미하기 때문이다.
  5. 계산한 실패율로 0의 자리에 넣어 업데이트한다.
  6. 실패율이 높은거로 정렬하되 만약 실패율이 같다면 단계가 낮은 순서로 정렬시킨다.
from collections import Counter
def solution(N, stages):
    answer = []
    _dict = Counter(stages)    
    _list = [[i,-1] for i in range(1, N+1)]
    
    persons = len(stages)
    for i in range(N):        
        temp = _dict[i+1]
        _list[i][1]= temp/persons
        persons -= temp
    
    _list.sort(key = lambda x:(x[1],-x[0]),reverse = True)
    for l in _list:
        a,b= l
        answer.append(a)
        
    return answer

풀이 2 - (성공)

코드를 돌릴때 딱히 문제가 없어서 간과하고 있었던 부분이 있다. 실패율을 구할때 0으로 나눈 경우가 있을 수 있다.
ZeroDivisionError: division by zero
이부분을 조건문으로 달아야 예외처리 해야한다.

from collections import Counter
def solution(N, stages):
    answer = []
    _dict = Counter(stages)    
    _list = [[i,-1] for i in range(1, N+1)]
    
    persons = len(stages)
    for i in range(N):        
        temp = _dict[i+1]
        if temp != 0 and persons != 0:
            _list[i][1]= temp/persons
            persons -= temp
    
    _list.sort(key = lambda x:(x[1],-x[0]),reverse = True)
    for l in _list:
        a,b= l
        answer.append(a)

reference

profile
철학과가 도전하는 Big Data, AI

0개의 댓글