Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

Mini

프로그래머스 베스트앨범 c++ // 벡터에 여러타입 넣는방법 본문

Algorithm/해시

프로그래머스 베스트앨범 c++ // 벡터에 여러타입 넣는방법

Mini_96 2023. 11. 1. 17:24

https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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;
}