학습 기록/코딩 테스트 기초 이론

파이썬 코딩테스트 준비: 배열 기초 (2) - 실패율

romi__ 2024. 9. 24. 11:18

/date 24.09.24.

 

 
코딩 테스트 합격자 되기: 파이썬 편
신입 사원 코딩 테스트를 준비하고 계신가요? 코딩 테스트는 문제만 열심히 푼다고 통과할 수 없습니다. 시험은 전략적으로 준비해야 합니다. 《코딩 테스트 합격자 되기》(파이썬 편)은 신입 사원 코딩 테스트 합격에 딱 맞는 빈출문제를 선정하고 풀이하기 위해 저자와 전문 교강사진이 오랜 시간을 들여 고민해 만들었습니다. 문제의 맥을 관통하는 자료구조와 알고리즘, 시간 복잡도 분석까지 완벽하게 풀이했죠! 모든 내용은 친절한 설명에 풍부한 그림을 더해 말끔하게 이해할 수 있도록 했습니다. 코딩 테스트뿐만 아니라 그 다음에 있을 면접까지 대비할 수 있을 것입니다. 이 책과 함께라면 합격은 여러분의 것입니다.
저자
박경록
출판
골든래빗(주)
출판일
2023.11.15

 

'코딩 테스트 합격자 되기: 파이썬 편'을 읽으면서 파이썬을 이용한 코딩 테스트에 도전해보려고 합니다. 기초적인 이론에 대해 공부한 내용을 여기에 기록하고, 실제로 코딩 테스트 문제를 풀며 공부한 내용은 또 다른 카테고리에 기록해 둘 예정입니다. 그러니 틀린 내용이 있다면 댓글로 알려주세요. 코테 고수가 되는 그날까지 화이팅...!

 

오늘도 마찬가지로 배열 기초 문제를 마저 풀어보려고 합니다. 그래도 그 사이에 코딩 공부를 좀 했다고 문법이나 코드가 좀 익숙해졌네요. (발전하는 나를 셀프로 복복하기🫳🏻🫳🏻🫳🏻)

 

 

📌 실패율

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

제한 조건은 직접 확인하시길... 아래는 제가 작성한 답안 코드입니다.

def solution(N, stages):
    challenger = [0] * (N + 2)
    for stage in stages:
        challenger[stage] += 1
    
    fails = {}
    total = len(stages)
    
    for i in range(1, N+1):
        if challenger[i] == 0 :
            fails[i] = 0
        else:
            fails[i] = challenger[i] / total
            total -= challenger[i]
    
    answer = sorted(fails, key = lambda x : fails[x], reverse=True)
    return answer

 

한 줄씩 뜯어보겠습니다.

 

challenger = [0] * (N + 2)
for stage in stages:
    challenger[stage] += 1

 

각 스테이지에 도달한 사람의 수를 저장할 challenger 리스트를 만듭니다. 리스트의 크기가 N+2인 것은 N번째, 즉 마지막 스테이지에 도달한 사람까지 저장하기 위해서입니다. stages 배열에서 사용자들이 어느 stage에 멈춰 있는지 확인하고, 그 사용자가 멈춰 있는 stage 번호에 해당하는 challenger 리스트의 값을 1씩 증가시킵니다.

 

예를 들어, stages = [1,2,3,3,2,2,2]라면 challenger = [0, 1, 4, 2]가 되겠습니다.

 

fails = {}
total = len(stages)

 

fails에 각 스테이지별 실패율을 저장해 보겠습니다. total은 총 사용자 수를 나타냅니다.

 

for i in range(1, N+1):
    if challenger[i] == 0 :
        fails[i] = 0
    else:
        fails[i] = challenger[i] / total
        total -= challenger[i]

 

그럼 스테이지별 실패율을 계산해야 합니다.

 

먼저 스테이지에 도전한 사람이 없을 경우를 가정해야 합니다. 이 경우, 실패율 또한 0으로 가정한다고 제한 조건에 적혀 있었습니다. 때문에 challenger[i] 가 0이라면 fails[i]도 0이 됩니다.

 

그 외 경우는 스테이지에 도전한 사람이 있고, 따라서 필연적으로 실패율도 존재합니다. fails[i]는 스테이지에 멈춰 있는 사람인 challenger[i]값을 total, 총 인원수로 나눠줍니다. 이후 스테이지에서는 앞선 스테이지에 멈춰 있는 사람의 수만큼 제외해 주어야 실패율 계산이 가능하므로 total값에서 challenger[i] 값을 빼줍니다.

 

answer = sorted(fails, key = lambda x : fails[x], reverse=True)
return answer

 

이제 답을 출력해 줍니다.

 

fails를 정렬하되, lambda를 활용해 실패율을 가져와서 이를 기준으로 정렬합니다. reverse=True로 두면 내림차순 정렬을 하되 실패율이 같은 경우 스테이지 번호가 작은 것이 먼저 오도록 할 수 있습니다.