https://school.programmers.co.kr/learn/courses/30/lessons/42579
따로 생각할 필요없이 문제가 시키는대로 구현하면 되는데 자료구조를 잘 이용해야 한다.
⭐이런 유형 코테에서 엄청 많이 나왔었던 것 같다.⭐
map<string, int> music;
map<string, map<int, int>> musiclist;
for(int i=0; i<genres.size(); i++) {
// m[1] = 100;
// map에 요소 삽입
music[genres[i]] += plays[i];
musiclist[genres[i]][i] = plays[i];
}
2. 풀이
로직은 단순한데 이중 map
이랑 범위 기반 for문
을 적절히 사용해서 코드를 작성해야 한다.
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
map<string, int> music;
map<string, map<int, int>> musiclist;
for(int i=0; i<genres.size(); i++) {
music[genres[i]] += plays[i];
musiclist[genres[i]][i] = plays[i];
}
while(music.size() > 0) {
string genre = "";
int max = 0;
for(auto m : music) { //제일 많이 재생된 장르 찾기
if(max < m.second) {
max = m.second;
genre = m.first;
}
}
for(int i=0; i<2; i++) {
int val = 0;
int index = -1;
for(auto ml : musiclist[genre]) { //장르 내에서 제일 많이 재생된 곡 찾기
if(val < ml.second) {
val = ml.second;
index = ml.first;
}
}
if(index == -1) break; //두곡 미만일 경우
answer.push_back(index);
musiclist[genre].erase(index);
}
music.erase(genre);
}
return answer;
}