Programmers/프로그래머스-실패율-python
📖 문제
🎈 풀이
- 스테이지에 도달한 플레이어 수를 저장할 dictionary dodal과, 스테이지에 도달했으나 아직 클리어하지 못한 플레이어 수를 저장할 dictionary silpae를 만들었음
- 문제 개수만큼 돌며 key를 문제번호로, value를 0으로 채워주었음
- stages를 순회하며 문제개수보다 하나 큰 값이 나오면 모든 문제를 dodal += 1 해주고
아닐경우 1부터 도달한 문제까지 dodal +=1, 도달한 문제는 silpae += 1 해주었음
- 스테이지에 도달한 유저가 없는 경우는 실패율을 0으로 해주고, 실패율을 계산하여 silpae dict에 저장하였음
- 이후 (key,value) 형태로 만든 뒤, sorted를 이용해서 value 값 역순으로 정렬(정렬하면 실패율이 같을 경우 작은 번호가 먼저 나오는 것까지 해결됨)
- 그대로 answer에 하나씩 key(문제번호)를 넣어주어 완성하였다.
💻 코드
💊 탑👍 코드
- result dictionary 1개로 다 처리했다..
- denominator를 만들어놓고, 낮은 스테이지에 도달해있는 인원들을 제외하면서 상위 스테이지에 도달한 인원수를 구하는 데 사용되었다.
- if/else로 스테이지에 도달한 인원수가 0인 것 처리를 해주었고, stage에 도달하였으나 아직 클리어하지 못한 인원수를 count로 계산, 한 뒤 denominator로 나누어 result에 key : 스테이지, value : 실패율로 저장하였다.
- 이후 출력 시 sorted로 value 역순 정렬하여 key를 출력하도록하여 return하였음
- 코드는 깔끔하나, 댓글을 참고하였을 때 for문 안에서 count를 매번하는 것보다는, dict을 하나 만들어 도달하였으나 처리하지 못한 인원을 계산해두면 시간복잡도를 O(n^2) -> O(n)으로 줄일 수 있다고 배웠다.
✨ 실행 결과
💡 문제 출처
프로그래머스