https://school.programmers.co.kr/learn/courses/30/lessons/42579
1. 벡터에 여러타입 넣는방법
구조체선언 후, v.push_back({"1",1})하면 된다
2. 의사코드
2.1. {장르, 총플레이횟수} 저장
2.2. {플레이횟수, 장르, 인덱스} 저장
2.3. 플레이횟수기준 내림차순 정렬
2.4. 최대플레이장르에 대해 장르가같으면 push(idx), cnt>=2이상이면 다음장르 탐색
3. 전체코드
#include <bits/stdc++.h>
using namespace std;
map<string, int> m1; //장르, 총재생수
//맵기본정렬 : 키기준, 오름차순
struct A{
int plays;
string gen;
int idx;
};
struct B{
string gen;
int tot;
};
vector<A> v;
vector<B> v2;
bool cmp(A a1, A a2){
return a1.plays>a2.plays;
}
bool cmp2(B b1, B b2){
return b1.tot>b2.tot;
}
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
for(int i=0;i<genres.size();++i){
m1[genres[i]]+=plays[i];
v.push_back({plays[i],genres[i],i});
}
for(auto it:m1){
v2.push_back({it.first,it.second});
}
sort(v2.begin(),v2.end(),cmp2);
// for(auto i : v2){
// cout<<i.tot<<" "<<i.gen<<"\n";
// }
sort(v.begin(),v.end(),cmp);
// for(auto i : v){
// cout<<i.plays<<" "<<i.gen<<" "<<i.idx<<"\n";
// }
for(auto i : v2){
int cnt=0;
for(auto it:v){
if(cnt>=2) break;
if(i.gen==it.gen){
answer.push_back(it.idx);
cnt++;
}
}
}
// for(auto item:m2){
// cout<<item.first<<" "<<item.second.first<<" "<<item.second.second<<"\n";
// }
return answer;
}
'Algorithm > 해시' 카테고리의 다른 글
리트코드 투썸 c++ // pair 이분탐색 방법 , 해쉬맵, nC2 O(n) 구현방법 (0) | 2024.05.18 |
---|