Scroll indicator done
728x90

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


1. m을 정렬하고
2. music을 재생 횟수로 정렬하고
3. m을 한 개씩 읽으면서 반복
4. music에선 두 개 넘으면 break (1개일 때도 있어서 2번으로 반복 돌리면 안됨)

auto :
"타입추론"
값에 따라 알아서 데이터 타입을 정해주는 키워드
 
const auto :
상수 취급이라 값을 변경할 수 없음 + 알아서 데이터 타입 정해줌

unordered_map :
hash_map -> unordered_map
순서 상관없이 저장. 해시 테이블을 사용해 키의 순서를 유지하지 않는 자료구조.
자료의 양이 적을 땐 vector나 list가 나음

vector::assign :
벡터에 새로운 내용을 넣음. 벡터 객체에 이전에 있었던 원소들은 모두 삭제하고, 인자로 받은 새로운 내용을 저장.
#include <string>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;

bool cmp(pair<int, int> a, pair<int, int> b);
bool cmp_value(pair<string, int> a, pair<string, int> b);

vector<int> solution(vector<string> genres, vector<int> plays) {
    vector<int> answer;
    unordered_map<string, vector<pair<int, int>>> m;
    unordered_map<string, int> music;

    vector<pair<string, int>> v;

    for (int i = 0; i < genres.size(); i++) {
        m[genres[i]].push_back(make_pair(plays[i], i));
        music[genres[i]] += plays[i];
    }

    for (auto& k : m)
        sort(k.second.begin(), k.second.end(), cmp);

    v.assign(music.begin(), music.end());
    sort(v.begin(), v.end(), cmp_value);


    for (int i = 0; i < v.size(); i++) {
        string name = v[i].first;

        for (int j = 0; j < m[name].size(); j++) {
            if (j >= 2) break;
            answer.push_back(m[name][j].second);
        }
    }

    return answer;
}

bool cmp(pair<int, int> a, pair<int, int> b) {
    return a.first > b.first;
}

bool cmp_value(pair<string, int> a, pair<string, int> b) {
    return a.second > b.second;
}
728x90

'Programmers > C++' 카테고리의 다른 글

[Programmers Lv.1][폰켓몬][C++]  (0) 2023.02.24
[Programmers Lv.1][가운데 글자 가져오기][C++]  (0) 2023.02.24