๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Problem Solving/C ++

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฒ ์ŠคํŠธ์•จ๋ฒ” (C++)

by oliviarla 2022. 6. 4.

๋ฌธ์ œ ์„ค๋ช…

์ŠคํŠธ๋ฆฌ๋ฐ ์‚ฌ์ดํŠธ์—์„œ ์žฅ๋ฅด ๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋‘ ๊ฐœ์”ฉ ๋ชจ์•„ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์„ ์ถœ์‹œํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋ž˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ๋…ธ๋ž˜๋ฅผ ์ˆ˜๋กํ•˜๋Š” ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์†ํ•œ ๋…ธ๋ž˜๊ฐ€ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
  2. ์žฅ๋ฅด ๋‚ด์—์„œ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
  3. ์žฅ๋ฅด ๋‚ด์—์„œ ์žฌ์ƒ ํšŸ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋…ธ๋ž˜ ์ค‘์—์„œ๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋ž˜์˜ ์žฅ๋ฅด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด genres์™€ ๋…ธ๋ž˜๋ณ„ ์žฌ์ƒ ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด plays๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์— ๋“ค์–ด๊ฐˆ ๋…ธ๋ž˜์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ
  • genres[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜์˜ ์žฅ๋ฅด์ž…๋‹ˆ๋‹ค.
  • plays[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜๊ฐ€ ์žฌ์ƒ๋œ ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • genres์™€ plays์˜ ๊ธธ์ด๋Š” ๊ฐ™์œผ๋ฉฐ, ์ด๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์žฅ๋ฅด ์ข…๋ฅ˜๋Š” 100๊ฐœ ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค.
  • ์žฅ๋ฅด์— ์†ํ•œ ๊ณก์ด ํ•˜๋‚˜๋ผ๋ฉด, ํ•˜๋‚˜์˜ ๊ณก๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์žฅ๋ฅด๋Š” ์žฌ์ƒ๋œ ํšŸ์ˆ˜๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋ฌธ์ œ ๋ถ„์„

1. ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋‹ค์Œ 2. ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋กœ ์ •๋ ฌํ•˜๊ณ  3. ์ž‘์€ index๋ฅผ ๊ฐ€์ง„ ์ˆœ์„œ๋กœ ์ •๋ ฌํ•œ ํ›„

ํ•œ ์žฅ๋ฅด์— ์ตœ๋Œ€ 2๊ฐœ์”ฉ์˜ ๋…ธ๋ž˜๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค.

 

๋น„์Šทํ•˜๊ฒŒ ์ •๋ ฌํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ฝ”ํ…Œ์—์„œ ํ’€์–ด๋ณธ ์  ์žˆ์ง€๋งŒ ์•„์ง ํ•ด์‹œ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์ „์ด๋ผ ๋ฒกํ„ฐ๋กœ ์ •๋ ฌํ–ˆ์—ˆ๋Š”๋ฐ, ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

์„ธ ๊ฐ€์ง€ ์ •๋ ฌ ์กฐ๊ฑด์„ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ป๊ฒŒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์„ค์ •ํ•  ์ง€ ๊ณ ๋ฏผ๋˜์—ˆ๋Š”๋ฐ ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ Map ์†์— Map์„ ๋„ฃ์€ ๊ตฌ์กฐ๊ฐ€ ์“ฐ์ด๊ธธ๋ž˜ ๋ฐ”๋กœ ์‚ฌ์šฉํ•ด๋ดค๋‹ค.

 

genre_plays: ์žฅ๋ฅด๋งˆ๋‹ค ์žฌ์ƒ ํšŸ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ•ด์‹œ๋งต

plays_id: <์žฅ๋ฅด, <์ธ๋ฑ์Šค, ์žฌ์ƒํšŸ์ˆ˜> > ๋กœ ์ €์žฅ๋˜์–ด ํ•ด๋‹นํ•˜๋Š” ์žฅ๋ฅด์˜ <์ธ๋ฑ์Šค, ์žฌ์ƒํšŒ์ˆ˜>๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ•ด์‹œ๋งต

 

์ฒ˜์Œ์— ์ž‘์€ ์ธ๋ฑ์Šค ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๊ฑธ ๊นŒ๋จน๊ณ  ์ œ์ถœํ•ด์„œ 2๋ฒˆ, 15๋ฒˆ์—์„œ ์‹คํŒจ๋–ด์—ˆ๋Š”๋ฐ cmp ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด 2,3๋ฒˆ ์ •๋ ฌ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œ์ผฐ๋‹ค.

 

 

#include <bits/stdc++.h>

using namespace std;

bool cmp(pair<int, int> a, pair<int, int> b){
    if(a.first != b.first){
        return a.first>b.first;
    }
    else{
        return a.second<b.second;
    }
};


vector<int> solution(vector<string> genres, vector<int> plays) {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    vector<int> answer;
    unordered_map<string, int> genre_plays;
    unordered_map<string, map<int, int>> plays_id;
    
    for(int i=0;i<genres.size();i++){
        genre_plays[genres[i]]+=plays[i];
        plays_id[genres[i]][i]=plays[i];
    }
    
    vector<pair<string, int> > v(genre_plays.begin(), genre_plays.end());
    sort(v.begin(), v.end(), [](auto& a, auto& b){return a.second>b.second;});
    
    for(auto e: v){
        vector<pair<int, int> > temp;
        string genre = e.first;
        
        for(auto id: plays_id[genre]){
            temp.push_back({id.second, id.first});
        }
        
        sort(temp.begin(), temp.end(), cmp);
        int cnt =0;
        for(auto t: temp){
            if(cnt<2){
                answer.push_back(t.second);
                cnt++;
            }
            else break;
        }
    }
    return answer;
}

๋Œ“๊ธ€