프로그래머스 해시4 - 베스트앨범
업데이트:
문제 링크 - https://programmers.co.kr/learn/courses/30/lessons/42579
👀문제이해 및 풀이방법
c++ 의 map을 사용하는 문제이다. 문제를 히해하기가 조금 난해하긴 한데 천천히 읽고 이해하면 금방 풀 수 있다.
3개의 map을 사용했는데 string,int map을 통해 각 장르별 총 재생수를 더했고 string,pair map 2개를 통해 1등 2등의 paly수와 해당 곡 넘버를 저장하여 순위를 업데이트 시켰다.
마지막에는 map을 value를 기준으로 정렬을 해야하는데 이때 빼고는 따로 정렬을 사용하지않아서 unordered_map으로 사용하였다.
map을 value를 기준으로 정렬하는 방법은 vector에 map을 넣고 따로 value기준으로 compare함수 만들어서 정렬;;..
새로운걸 알게된 문제였다.
📝코드
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool compare(pair<string,int>& a,pair<string,int>& b){
return a.second>b.second;
};
vector<int> solution(vector<string> genres, vector<int> plays) {
map<string,int> M;
map<string,pair<int,int>> lank_num,lank_val;
for(int i=0;i<genres.size();i++){
M[genres[i]]+=plays[i];
if(lank_val[genres[i]].first<plays[i]){
lank_val[genres[i]].second=lank_val[genres[i]].first;
lank_num[genres[i]].second=lank_num[genres[i]].first;
lank_val[genres[i]].first=plays[i];
lank_num[genres[i]].first=i;
}
else if(lank_val[genres[i]].second<plays[i]){
lank_val[genres[i]].second=plays[i];
lank_num[genres[i]].second=i;
}
}
vector<pair<string,int>> sol(M.begin(),M.end());
sort(sol.begin(),sol.end(),compare);
vector<int> answer;
for(auto i : sol ){
answer.push_back(lank_num[i.first].first);
answer.push_back(lank_num[i.first].second);
}
return answer;
}
댓글남기기