# 생각
map을 이용하되 접근할 때는 vector를 통해 map의 value 값을 기준으로 정렬시켜줘야한다
정렬은 람다식을 이용하여 내림차순 정렬을 해줘도 되고 따로 boolean 형식의 compare 메서드를 이용해도 된다
# 전체 코드
#include <bits/stdc++.h>
using namespace std;
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
map<string, int> m; // 장르, 재생횟수
map<string, vector<pair<int, int>>> mList; // 장르, 재생횟수, 인덱스
for (int i = 0; i < genres.size(); i++)
{
m[genres[i]] += plays[i]; // 장르별 재생횟수
mList[genres[i]].push_back({ plays[i], i }); // 장르별 인덱스의 재생횟수
}
// 속한 노래가 많이 재생된 장르 먼저 수록
vector<pair<string, int>> tmp(m.begin(), m.end());
sort(tmp.begin(), tmp.end(),
[&](pair<string, int> lhs, pair<string, int> rhs)
{
return lhs.second > rhs.second;
});
// 장르 내에서 많이 재생된 노래 먼저 수록
for (auto& i : mList)
{
sort(i.second.begin(), i.second.end(),
[&](pair<int, int> lhs, pair<int, int> rhs)
{
return lhs.first > rhs.first;
});
}
// 음악이 2개이상이면 2개까지만 answer에 저장
for (int i = 0; i < tmp.size(); i++)
{
string str = tmp[i].first;
for (int j = 0; (j < mList[str].size()) && (j < 2); j++)
{
answer.push_back(mList[str][j].second);
}
}
return answer;
}
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'Algorithm > 프로그래머스' 카테고리의 다른 글
[Lv.3] 네트워크 with cpp (0) | 2022.03.03 |
---|---|
[Lv.2] 타겟 넘버 with cpp (0) | 2022.03.02 |
[Lv.2] 위장 with cpp (0) | 2022.03.01 |
[Lv.2] 전화번호 목록 with cpp (0) | 2022.02.28 |
[Lv.1] 완주하지 못한 선수 with cpp (0) | 2022.02.28 |