๋ฌธ์
๋ฒ ์คํธ ์จ๋ฒ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
ํ์ด
์ฐ์ ์์๋ด์ผ ํ ๊ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฅ๋ฅด์ ์ด ์ฌ์ ํ์ -> ์ฅ๋ฅด ์์ ์ ํ๊ธฐ
- ๊ฐ ์ฅ๋ฅด์ ๊ฐ๋ณ ๊ณก ์ฌ์ ํ์ -> ๊ณก ์์ ์ ํ๊ธฐ
์ด๊ฑธ ํ ๋ฒ์ ์์๋ด๋ ค๊ณ ํ๋ฉด ์ฅ๋ฅด๋ฅผ key๋ก ๋๊ณ ์๋ map์ value๋ก (์ด ์ฌ์ ํ์, index๋ง๋ค์ ์ฌ์ํ์)์ ์ ์ฅํด๋์ด์ผ ํ๊ณ ์ด๋ฌ๋ฉด ์ฅ๋ฅด์ ์์๋ฅผ ์์๋ด๊ธฐ ํ๋ค ๋ฟ๋ง ์๋๋ผ ๊ณก ์์๋ ์ถ์ถํด์ ๋ํ๋ด์ผ ํ๋ค. ๋ฐ๋ผ์ map์ ๋๊ฐ๋ก ๋๋์๋ค.
1๋ฒ map์ { key : ์ฅ๋ฅด, value : ์ด ์ฌ์ ํ์ } ๋ฅผ ๋ํ๋ด๊ณ ,
2๋ฒ map์ { key : ์ฅ๋ฅด, value : { key : ์ฅ๋ฅด/index , value : ์ฌ์ ํ์ }} ๋ฅผ ๋ํ๋ธ๋ค.
์์ ๊ฐ์ด map์ผ๋ก ๋ค ์ ์ฅํ ํ 1๋ฒ map์ ์ ๋ ฌํด์ ์ฅ๋ฅด์ ์์๋ฅผ ์ ํ๊ณ ,
์์ ๋ณ๋ก 2๋ฒ map์์ value ๊ฐ์ธ map์ ๊บผ๋ด์ ์ ๋ ฌํ๋ฉด 1, 2 ์์ ๊ณก์ index๋ฅผ ์ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ map์ ์ด๋ป๊ฒ value ๊ฐ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ๊น? map์ ๊ธฐ์กด์ key ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋๋ก ๋์ด์๋ค.
์๋์ ๊ฐ์ด vector๋ก ๋ง๋ค์ด ์ค ํ์ sort ํจ์๋ฅผ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
#include <algorithm>
#include <map>
#include <vector>
#include <string>
bool compare (pair<string, int>&a, pair<string, int>&b) {
return a.second > b.second;
}
map<string, int> sortMap;
vector<pair<string,int>> sortVec(sortMap.begin(), sortMap.end());
sort(sortVec.begin(), sortVec.end(), compare);
์ฝ๋
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool compare(const pair<string,int>& a, const pair<string,int>& b) {
return a.second > b.second;
}
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
map<string, int> genreMap; // ์ฅ๋ฅด -> ์ด ์ฌ์ํ์
map<string, map<string, int>> genreIndexMap; // ์ฅ๋ฅด -> ์ฅ๋ฅด+index -> ์ฌ์ํ์
for(int i=0; i<genres.size(); i++){
string genre = genres[i];
int play = plays[i];
if (genreMap[genre]) {
genreMap[genre] += play;
} else {
genreMap[genre] = play;
}
genreIndexMap[genre][genre.append("/"+to_string(i))] = play; // "/"๋ก split ํ ์ ์๊ฒ ํ๊ธฐ
}
// map์ vector๋ก ๋ฐ๊พธ์ด value ๊ธฐ์ค ์ ๋ ฌ
vector<pair<string,int>> genreVec(genreMap.begin(), genreMap.end());
sort(genreVec.begin(), genreVec.end(), compare);
for(auto iter = genreVec.begin(); iter != genreVec.end(); iter++) {
string nowGenre = iter->first;
auto indexMap = genreIndexMap[nowGenre];
vector<pair<string, int>> indexVec(indexMap.begin(), indexMap.end());
sort(indexVec.begin(), indexVec.end(), compare);
int maxNum = 2; // ํ ์ฅ๋ฅด์์ ์ต๋ 2๊ณก
for(int i=0; i<maxNum && i<indexVec.size(); i++) {
int idx = indexVec[i].first.find("/");
answer.push_back(stoi(indexVec[i].first.substr(idx+1))); // "/" ์ดํ์ ์ซ์๋ง ์ถ์ถ
}
}
return answer;
}
๊ฒฐ๊ณผ
Comment