Programmers/Level 3

[프로그래머스 3] 베스트 앨범 (C/C++) (★)

워니- 2020. 1. 7. 23:53
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
 
bool cmp(pair<intint> a, pair<intint> b)
{
    if(a.first > b.first)
    {
        return true;
    }
    else if(a.first == b.first)
    {
        if(a.second < b.second)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}
 
vector<int> solution(vector<string> genres, vector<int> plays) 
{
    vector<int> answer;
    vector<string> gName;
    map<stringint> gVisited;
    
    // 1. 속한 노래가 많이 재생된 장르를 먼저 수록합니다.
    for(int i = 0; i < genres.size(); i++)
    {
        if(gVisited[genres[i]] == 0)
        {
            gName.push_back(genres[i]);
        }
        
        gVisited[genres[i]] += plays[i];
    }
    
    vector<pair<intstring>> gRank;
    for(int i = 0; i < gName.size(); i++)
    {
        gRank.push_back({gVisited[gName[i]], gName[i]});
    }
    // 장르 순서 정렬(오름차순)
    sort(gRank.begin(), gRank.end(), greater<pair<intstring>>());
    
 
    // 2. 장르 내에서 많이 재생된 노래를 먼저 수록합니다.
    // 3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.
    for(int i = 0; i < gRank.size(); i++)
    {
        // 노래 재생횟수 저장
        vector<pair<intint>> reserve;
        
        for(int j = 0; j < genres.size(); j++)
        {
            if(gRank[i].second == genres[j])
            {
                reserve.push_back({plays[j], j});
            }
        }
        
        // 노래 순서 정렬(cmp)
        sort(reserve.begin(), reserve.end(), cmp);
        
        if(reserve.size() == 1)
        {
            answer.push_back(reserve[0].second);
        }
        else
        {
            answer.push_back(reserve[0].second);
            answer.push_back(reserve[1].second);
        }
    }
    
    return answer;
}
cs