programmers.co.kr/learn/courses/30/lessons/42889?language=python3
def solution(N, stages):
answer = []
result = []
length = len(stages)
for i in range(1,N+1):
not_finish = stages.count(i)
fail = not_finish / length
result.append((i, fail))
length -= not_finish
result.sort(key = lambda x: x[1], reverse = True)
for r in result:
answer.append(r[0])
return answer
처음에는 이렇게 코드를 작성했더니 런타임 에러가 발생했습니다 코드는 다 맞는거 같은데 왜 오류가 나는지 찾아보니 length 가 0일 경우일 때 에러가 발생한다는 것을 알았습니다. length가 0일 경우에 처리해주는 로직을 추가한 후 코드를 완성했고 테스트에 통과하였습니다!
def solution(N, stages):
answer = []
result = []
length = len(stages) # 스테이지에 도달한 플레이어
# 스테이지를 돌면서 실패율 계산
for i in range(1,N+1):
not_finish = stages.count(i) # 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
if length == 0: fail = 0
else: fail = not_finish / length
result.append((i, fail))
length -= not_finish
# 실패율 기준으로 내림차순 정렬
result.sort(key = lambda x: x[1], reverse = True)
# 스테이지 값만 따로 뽑기
for r in result:
answer.append(r[0])
return answer
먼저 length는 스테이지에 도달한 플레이어를 의미하는데 첫번째 스테이지는 모든 플레이어가 도달하므로 플레이어 수 값을 length에 저장합니다. 그 다음 스테이지를 돌면서 실패율을 계산합니다. not_finish는 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수를 의미하므로 i번째 스테이지에 머물러 있는 플레이어의 수를 파악하면 됩니다. stages.count(i) 를 하면 stages의 배열에서 i의 개수가 몇 개인지 파악할 수 있습니다. length가 0일 경우에는 실패율(fail)을 0으로 처리해주고 그렇지 않은 경우에는 실패율을 문제에 제시된대로 계산해줍니다. 계산이 끝나면 result에 스테이지 번호와 해당 스테이지 실패율을 튜플로 저장해줍니다. 마지막으로 다음 스테이지에 도달한 플레이어의 수를 계산합니다.
모든 스테이지의 실패율 계산이 끝났다면 실패율 기준으로 내림차순 정렬을 해준 뒤 스테이지 값만 뽑아서 answer에 저장해줍니다. answer를 리턴해주면 끝입니다!
- 배운 점 -
listdata = [2,2,1,3,8,5,7,6,3,6,2,3,9,4,4]
c1 = listdata.count(2)
c2 = listdata.count(7)
print(c1)
print(c2)
위의 예시처럼 리스트에서 특정 요소 개수를 구할 때 리스트명.count(특정 요소) 를 사용하면 됩니다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Python] 가장 큰 수 - Level2 (0) | 2021.05.09 |
---|---|
[프로그래머스/Python] K번째수 - Level1 (0) | 2021.05.09 |
[프로그래머스/Python] 베스트앨범 - Level3 (0) | 2021.05.05 |
[프로그래머스/Python] 위장 - Level2 (0) | 2021.05.04 |
[프로그래머스/Python] 전화번호 목록 - Level2 (0) | 2021.05.02 |