해결된 질문
작성
·
127
1
현재 3주차 숙제 부분에서 3번째 문제인
멜론 베스트 앨범 알고리즘을 공부하고 있습니다.
이해가 되지 않는 부분이 있어서, 문의 드립니다.
3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록한다.
해당 문제에 보면 , 위와 같은 조건이 존재하는데 ,
제가 강의를 두 번이나 돌려보면서 듣고 있는데 ,강의 하신 내용에, 재생횟수가 같은 노래에 대해서는 처리하신 코드가 안 보이는데, 보내주신 코드를 프로그래머스에 돌려봐도 정상적인 답안이라고 나오더라고요.
그래서, 해당 부분에 대한 설명이 있으면 더 좋을 듯 하고 궁금해서 질문드립니다.
제가 생각한 부분은 이미
for 문을 돌 때, 인덱스 순서대로 되어 있으므로,
재생횟수로 정렬을 해도 인덱스가 낮은 것이 무조건 앞으로 오게 된다. 이렇게 생각했는 데 맞는 것인지 궁금합니다.
답변 2
1
0
안녕하세요 sonjs 님!! 좋은 질문 넘넘 감사합니다
질문하신 대로, 인덱스 순서대로 처리되는 이유는 이미 for
루프와 sorted
함수의 특성 때문입니다.
sorted_genre_index_play_array = sorted(
genre_index_play_array_dict[genre],
key=lambda item: item[1],
reverse=True
)
여기서 sorted
함수는 reverse=True
로 재생 횟수를 기준으로 내림차순 정렬하고 있습니다.
하지만 재생 횟수가 동일한 경우에는, Python의 sorted
함수는 안정 정렬(stable sort)을 사용하기 때문에, 원래 입력 순서(즉, 인덱스 순서)를 유지합니다.
즉, genre_index_play_array_dict[genre]
리스트는 처음에 인덱스 순서대로 저장되었으므로, 동일한 재생 횟수를 가진 노래는 자연스럽게 인덱스가 낮은 순서대로 정렬됩니다.
네, 질문자님께서 생각하신 내용이 정확합니다!
이미 for
루프에서 데이터를 genre_index_play_array_dict[genre]
에 추가할 때 인덱스 순서대로 저장되었으므로, sorted
를 적용해도 안정 정렬 특성상 인덱스가 낮은 것이 먼저 오게 됩니다.
genre_index_play_array_dict["classic"] = [[0, 150], [2, 150], [3, 800]]
여기서 sorted
를 적용하면, 재생 횟수를 기준으로 정렬된 결과는:
[[3, 800], [0, 150], [2, 150]]
이런 식으로 정렬되며, 재생 횟수가 동일한 항목의 경우 인덱스 순서를 유지했을 것입니다.
프로그래머스에서 제출된 코드가 정답으로 처리되는 이유는:
재생 횟수를 기준으로 정렬하는 로직은 명확히 구현되어 있고,
동일한 재생 횟수의 경우 안정 정렬의 특성상 인덱스 순서대로 처리되기 때문입니다.
이로 인해, 문제의 조건(재생 횟수 같을 경우 인덱스가 낮은 순서)이 자연스럽게 만족됩니다.
따라서 sonjs7554 님의 생각이 맞습니다! 이미 for
루프와 sorted
함수의 안정 정렬 특성으로 인해, 재생 횟수가 동일한 경우 인덱스 순서가 유지됩니다.
이 내용에 대해 설명이 추가적으로 작성되면 더 좋을 것 같습니다!!
감사드립니다 덕분에 더 좋은 강의를 만들 수 있을 것 같습니다!! 좋은 하루 보내시고 새해 복 많이 받으세요
친절한 답변 감사드립니다..!!