프로그래머스 _ 실패율
programmers.co.kr/learn/courses/30/lessons/42889
제일 먼저 든 생각 → 문제가 무지 길다!
다음으로 든 생각 → 일단 각 스테이지의 실패율을 구해야 비교가 가능하겠다!
그래서 실패율을 구하러 떠났다.
실패율 = 스테이지에 도달했으나 클리어하지 못한 플레이어 수 / 스테이지 도달한 플레이어 수!
이를 구하기 위해서는... 우선 각 스테이지 번호를 담은 list가 있어야 한다!
스테이지의 개수가 N으로 주어졌으므로 range(1,N+1)을 list에 담으면 각 스테이지 번호가 담길 테다!
다음은 각 스테이지 별 플레이어의 수를 구해야 하는데... 이를 위해 전체 플레이어의 수가 필요하다!
stages에는 각 플레이어가 멈춰있는 스테이지 번호가 담겨 있으므로... 얘의 길이 == 전체 플레이어 수!
대망의 실패율 구하기! 단순해 보이지만 제법 고민했다.
우선 all_stage를 for문으로 돌려 각 스테이지 번호를 하나씩 가져온다!
1번 스테이지의 실패율 = 1번에 멈춰있는 플레이어 수 / 전체 플레이어 수
2번 스테이지의 실패율 = 2번에 멈춰있는 플레이어 수 / 전체 플레이어 수 - 1번에 멈춰있는 플레이어 수
3번 스테이지의 실패율 = 3번에 멈춰있는 플레이어 수 / 전체 플레이어 수 - 1번&2번에 멈춰있는 플레이어 수
...
일 테다!
따라서 stage.count(i)를 통해 i번째 스테이지에서 실패한 유저의 수를 구하고,
이를 all_user로 나눠 줌으로써 실패율(여기서는 how_many)을 구할 수 있다!
얘를 fail이라는 list에 넣어줌으로써 각 스테이지의 순서대로 실패율이 담기게 된다!
그런데 i번째 스테이지에 멈춰있는 플레이어가 아무도 없다면? 즉 i not in stages면?
해당 스테이지의 실패율은 0!!! 모두가 성공했다는 뜻이다!
따라서 이 때는 0을 list에 담아준다.
그리고 이렇게 실패율을 구한 후에는?
분모가 되는 전체 플레이어 수에서 해당 스테이지에 멈춘 플레이어 수를 빼줘야!
각각 1번째, 2번째, ... 5번째 스테이지의 실패율!!! 잘 담긴 걸 확인할 수 있다.
이 녀석들을 큰 순서대로 정렬하면 끝!
...이면 참말로 좋겠지만...
우리가 return 해야 하는 값은 실패율이 아닌, 실패율이 높은 순서대로 정렬된 스테이지 번호다!!!
그렇다면 실패율과 각 스테이지 번호를 연결시켜줘야 하는데...
→ dict를 통해 이를 해결할 수 있다!!!
즉 각 스테이지 번호를 Key값으로, 실패율을 Value값으로 짝지어주면 될 일!
그럼 그건 어떻게 하는겨?
몰랐던 거라 주석에도 적어줬다! zip()을 이용해 가능하다!!!
zip()은 동일한 개수로 이루어진 list를 묶어주는 메서드!
우리는 Value를 비교해 Key값을 정렬하는 방식을 사용하고 싶기 때문에... 이 녀석을 dict형태로 바꿔줬다.
대망의 마지막!
우리가 하고 싶은 일은 → 실패율이라는 Value를 기준으로 스테이지 번호인 Key를 내림차순 정렬하기!
우선 sorted(reverse = True)를 통해 내림차순 정렬을 지정해주고,
sorted(key= ) 을 지정해줌으로써 정렬 기준을 정해줬다!
그런데 이 정렬 기준은? fail_dict이라는 dict의 value값!!!
따라서 lambda x : fail_dict[x] ← 요 녀석을 통해 key를 fail_dict의 value로 지정해줬다!!!
완성된 코드! 오늘도 10점을 획득했다. 역시 길수록 점수가 높은...?
다른 사람의 풀이!
요 풀이를 보니... 굉장히 쓸 때 없는 짓을 했음을 알 수 있었다!
→ 우리는 fail을 list로 만들고, 이 녀석을 다시 dict으로 만들고, 얘를 다시 실패율을 기준으로 한 list로 만들었다.
이 무슨 비효율적인 짓!
요 풀이처럼 처음부터 dict형태로 실패율을 담은 후 이를 sorted 해주면 알아서 list가 반환되잖나! 와우!!!
'source-code > Algorithm' 카테고리의 다른 글
프로그래머스 _ 내적 (0) | 2021.02.19 |
---|---|
프로그래머스 _ 두 개 뽑아서 더하기 (0) | 2021.02.18 |
프로그래머스 _ 이상한 문자 만들기 (0) | 2021.02.16 |
프로그래머스 _ 하샤드 수 (0) | 2021.02.15 |
프로그래머스 _ 같은 숫자는 싫어 (0) | 2021.02.14 |