프로그래머스 해시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;
}

댓글남기기