소스 코드
def solution(N, stages):
answer = [0 for _ in range(N)]
# 유저수
u = len(stages)
# 스테이지 정렬
stages.sort(reverse=True)
# 클리어 못한 유저수
# 해당 스테이지에서 막힌 유저수, 해당 스테이지에 도달한 유저수, 스테이지 번호
unclear = [[0,0,_] for _ in range(N)]
# 현재까지의 유저 수
cnt = 0
for q in stages:
cnt += 1
if q != N + 1:
unclear[q-1][0] += 1
unclear[q-1][1] = cnt
# 실패율, 스테이지 번호
u_info = [[0,_+1] for _ in range(N)]
for w in unclear:
if w[0] != 0 and w[1] != 0:
u_info[w[2]][0] = w[0] / w[1]
else:
u_info[w[2]][0] = 0
u_info.sort(key=lambda x:x[0], reverse=True)
# 실패율
for e in range(N):
answer[e] = u_info[e][1]
return answer
해결 방법
1. 해당 스테이지에 몇 명이 도달했는지 알아야 하고, 몇 명이 통과했는지 알아야 함
2. dict 형태든, [0,1] 형태든 해당 index의 값(스테이지 번호)만 저장해야 함
3. 이후 실패율에 따라 정렬만 진행하면 됨
(count를 쓰면 좀 더 보기 좋은 코드를 작성할 수 있을 것이라 생각하지만, count 사용한 내 코드는 속도가 느려서 포기...)
느낀 점
ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제풀이.프로그래머스' 카테고리의 다른 글
[프로그래머스 코딩] [1차] 캐시 - PYTHON (0) | 2021.10.05 |
---|---|
[프로그래머스 코딩] 복서 정렬하기 - PYTHON (0) | 2021.09.06 |
[프로그래머스 코딩] 프린터 - PYTHON (0) | 2021.09.04 |
[프로그래머스 코딩] 조이스틱 - PYTHON (0) | 2021.09.03 |
[프로그래머스 코딩] 전화번호 목록 - PYTHON (0) | 2021.09.02 |