/date 24.09.24.
'코딩 테스트 합격자 되기: 파이썬 편'을 읽으면서 파이썬을 이용한 코딩 테스트에 도전해보려고 합니다. 기초적인 이론에 대해 공부한 내용을 여기에 기록하고, 실제로 코딩 테스트 문제를 풀며 공부한 내용은 또 다른 카테고리에 기록해 둘 예정입니다. 그러니 틀린 내용이 있다면 댓글로 알려주세요. 코테 고수가 되는 그날까지 화이팅...!
오늘도 마찬가지로 배열 기초 문제를 마저 풀어보려고 합니다. 그래도 그 사이에 코딩 공부를 좀 했다고 문법이나 코드가 좀 익숙해졌네요. (발전하는 나를 셀프로 복복하기🫳🏻🫳🏻🫳🏻)
📌 실패율
https://school.programmers.co.kr/learn/courses/30/lessons/42889
제한 조건은 직접 확인하시길... 아래는 제가 작성한 답안 코드입니다.
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로 두면 내림차순 정렬을 하되 실패율이 같은 경우 스테이지 번호가 작은 것이 먼저 오도록 할 수 있습니다.
'학습 기록 > 코딩 테스트 기초 이론' 카테고리의 다른 글
파이썬 코딩테스트 준비: 배열 기초 문제 풀어보기 (1) (1) | 2024.09.14 |
---|---|
파이썬 코딩테스트 준비: 배열 (4) | 2024.09.08 |
파이썬 코딩테스트 필수 문법 (0) | 2024.09.01 |
코딩 테스트 준비, 알고리즘 효율 분석 (0) | 2024.08.28 |