타이틀
코딩테스트 연습 > 해시 > 베스트앨범
문제 설명
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다.
|
제한 사항
|
입출력 예제
genres | plays | return |
["classic", "pop", "classic", "classic", "pop"] | [500, 600, 150, 800, 2500] | [4, 1, 3, 0] |
입출력 예 설명
classic 장르는 1,450회 재생되었으며, classic 노래는 다음과 같습니다.
|
코드
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <tuple>
using namespace std;
bool pair_compare(pair<string, int> a, pair<string, int> b) {
return a.second > b.second;
}
bool tuple_compare(tuple <string, int, int> a, tuple <string, int, int> b) {
return get<2>(a) > get<2>(b);
}
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
unordered_map<string, int> m_played;
vector<tuple<string, int, int>> v_music_list;
for( int idx = 0 ; idx < (int)genres.size() ; idx++ ) {
m_played[genres[idx]] += plays[idx];
v_music_list.push_back(make_tuple(genres[idx], idx, plays[idx]));
}
vector<pair<string, int>> v_played;
for( auto m: m_played ) {
v_played.push_back(make_pair(m.first , m.second));
}
sort(v_played.begin(), v_played.end(), pair_compare);
sort(v_music_list.begin(), v_music_list.end(), tuple_compare);
for( auto it: v_played ) {
int num_list = 0;
for( auto music: v_music_list ) {
if( it.first != get<0>(music) ) continue;
if( ++num_list > 2 ) break;
answer.push_back(get<1>(music));
}
}
return answer;
}
결과
끝.
'IT > programming' 카테고리의 다른 글
[PHP] URI '/'(slash) 중복 처리 / preg_replace, 정규식 (1) | 2022.03.04 |
---|---|
[PHP] nested JSON key 추출 / 재귀함수 활용, recursive call (4) | 2022.03.03 |
[C++] 프로그래머스, 더 맵게 (2) | 2022.02.16 |
[C++] 프로그래머스, 전화번호 목록 (0) | 2022.02.16 |
[PYTHON] 유효한 날짜 포맷 확인 / 정규식, re (6) | 2022.01.28 |
댓글