해결방법
- 총 두 가지의 자료구조를 사용했음
- 1) 많이 재생된 장르가 뭔지 → key를 장르로 하고 value에 같은 장르의 전체 재생 횟수를 뒀음
- 2) 같은 장르 내에서 많이 재생된 노래 순서 → 고유 번호, 장르, 재생횟수를 가지는 struct를 만들어서 sort 해줌
- 두 개를 재생 횟수를 기준으로, 내림차순(DESC) 정렬해줬음
코드
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
struct Music
{
int idx=0;
string genre;
int play = 0;
Music(int _idx, string _g, int _p):idx(_idx), genre(_g), play(_p){}
};
map<string, int> maxGenre;
bool desc(pair<string, int> &aa, pair<string, int> &bb)
{
return aa.second > bb.second;
}
bool compare(Music a, Music b)
{
return a.play > b.play;
}
void insert(string genre, int play)
{
auto it = maxGenre.find(genre);
if( it != maxGenre.end() )
it->second += play;
else
maxGenre[genre] = play;
}
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
vector<Music> music;
for(int i=0; i<genres.size(); i++)
{
Music msc(i, genres[i], plays[i]);
music.push_back(msc);
insert(genres[i], plays[i]);
}
vector<pair<string, int>> vec(maxGenre.begin(), maxGenre.end());
sort(vec.begin(), vec.end(), desc);
sort(music.begin(), music.end(), compare);
int cnt = 1;
for(auto v : vec)
{
cnt = 1;
for(int i=0; i<music.size(); i++)
{
if(v.first != music[i].genre)
continue;
answer.push_back(music[i].idx);
if( cnt == 2 ) break;
cnt++;
}
}
return answer;
}
'CS > 프로그래머스' 카테고리의 다른 글
프로그래머스 - level3/있었는데요 없었습니다/MySql (0) | 2023.05.19 |
---|---|
프로그래머스 - level2/가장큰수/C++ (0) | 2023.05.15 |
프로그래머스 - level 3/최고의 집합/C++ (4) | 2023.05.12 |
프로그래머스 - 탐욕법(Greedy)/체육복/C++ (0) | 2021.08.02 |
프로그래머스 - 완전탐색/모의고사/C++ (0) | 2021.07.30 |