오늘의 알고리즘
[C++]해시 베스트앨범(프로그래머스 3레벨)
하늘하늘 .
2022. 4. 12. 18:08
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool cmp(pair<string,int> pairFirst, pair<string,int> pairSecond)
{
return pairFirst.second < pairSecond.second;
}
vector<int> solution(vector<string> genres, vector<int> plays)
{
vector<int> answer = {};
// 가장 큰 값이 어떤 건지 확인용도
map<string, int> ordered_Map = {};
// 어떤 값이 들어갈 지 큰값에 맞춰서 (같은 값이 있을 수 있어서 multi)
map<string, multimap<int,int,greater<int>>> playMap = {};
for (int i = 0; i < plays.size(); ++i)
{
ordered_Map[genres[i]] += plays[i];
playMap[genres[i]].insert({ plays[i], i });
}
// 큰값인 것을 뒤로(pop_back하기 위해)
vector<pair<string, int>> vec(ordered_Map.begin(), ordered_Map.end());
sort(vec.begin(), vec.end(), cmp);
int iSize = vec.size();
for (int i = 0; i < iSize; ++i)
{
string sMany = vec.back().first;
for (int j = 0; j < 2; ++j)
{
// 두 개만 넣는데 한 개일 경우 break
if (!playMap[sMany].empty())
{
answer.push_back(playMap[sMany].begin()->second);
playMap[sMany].erase(playMap[sMany].begin());
}
else
break;
}
vec.pop_back();
}
return answer;
}
1. 이중 맵이 가능한지도 모르고 맵은 중첩안되는데... 하면서 멀티map도 쓰고... 아주...
2. 횟수가 중첩되는지 모르고 map썻다가 2번 15번 테케 탈... 아...! 하면서 바로 multimap...
어떻게 매일 하는데도 배울게 생겨서... 해도해도 할게 많아~