-
문제 - 베스트 앨범개발일지/알고리즘 2021. 12. 27. 22:46
# 문제
Q. 멜론에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 한다. 노래는 인덱스 구분하며, 노래를 수록하는 기준은 다음과 같다. 1. 속한 노래가 많이 재생된 장르를 먼저 수록한다. (단, 각 장르에 속한 노래의재생 수 총합은 모두 다르다.) 2. 장르 내에서 많이 재생된 노래를 먼저 수록한다. 3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록한다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 인덱스를 순서대로 반환하시오.
# 예시
# 1 genres = ["classic", "pop", "classic", "classic", "pop"] plays = [500, 600, 150, 800, 2500] # 정답 = [4, 1, 3, 0] # 2 genres = ["hiphop", "classic", "pop", "classic", "classic", "pop", "hiphop"] plays = [2000, 500, 600, 150, 800, 2500, 2000] # 정답 = [0, 6, 5, 2, 4, 1]
# 해결과정
문제에서 주의할 점은 가장 큰 장르를 선정할 떄는 각 곡의 플레이수를 전부 합친 것을 기준으로 정렬해야한다.
결과부터 말하자면 해당 문제를 저번에 풀지 못해서 답지를 참고하였지만 dictionary만 이용한다는 것만 기억이 나서 어떻게든 정렬하려했지만 잘 갈피를 못잡아서 다른 방식으로 정렬을 하려다가 코드가 너무 길게 짜여지게 되서 결국 답지를 확인했다.
답지는 역시 dictionary를 이용해서 정렬을 하고
sorted([리스트], key=lambda x: x)
해당 메소드를 이용해서 풀어야한다 .
전체 dictionary에는 [장르]: [[고유번호, 플레이수]] 각 곡의 고유번호와 플레이수를 포함하셔 저장한다. (고유번호는 나중에 정답으로 반환해야하므로 기억해야함) 그리고 dictionary를 순서에 맞춰 잘 정리한다면 정답을 얻을 수 있었다.
이후에 for문으로 2개 씩 빼야하는 것도 추가
'개발일지 > 알고리즘' 카테고리의 다른 글
문제 - 라면 공장 (0) 2021.12.27 문제 - 올바른 괄호 (0) 2021.12.27 문제 - 쓱 최대로 할인 (0) 2021.12.27 문제 - 더하거나 빼거나 (0) 2021.12.27 문제 - 배달의 민족 배달 가능 여부 (1) 2021.12.27