Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

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

meeeeejin 2021. 1. 25. 14:33

 

๋ฌธ์ œ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/42579

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋ฒ ์ŠคํŠธ์•จ๋ฒ”

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

programmers.co.kr

 

ํ’€์ด

 

unordered_map์— ์žฅ๋ฅด ์ด๋ฆ„์„ key๋กœ, (์žฅ๋ฅด๋ณ„ ์žฌ์ƒ ํšŸ์ˆ˜, (๋…ธ๋ž˜์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ, ๋…ธ๋ž˜์˜ ์žฌ์ƒ ํšŸ์ˆ˜) ๋ฐฐ์—ด)์„ value๋กœ ์ €์žฅํ–ˆ๋‹ค. 

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ œ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ

genres plays return
[classic, pop, classic, classic, pop] [500, 600, 150, 800, 2500] [4, 1, 3, 0]

[classic] : (1450, { (0, 500), (2, 150), (3, 800) } )

[pop] : (3100, { (1, 600), (4, 2500) } )

 

์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค.

 

์ €์žฅ๋œ unordered_map์„ vector๋กœ ์˜ฎ๊ธด ๋‹ค์Œ์— ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•œ๋‹ค. (cmp1)

์ดํ›„ ์žฅ๋ฅด๋ณ„ ๋…ธ๋ž˜ ์ค‘์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•œ ๋’ค(cmp2), ๋งจ ์•ž์˜ ๋…ธ๋ž˜ 2๊ณก์„ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์— ์ถ”๊ฐ€ํ•œ๋‹ค. 

 

 

 

์†Œ์Šค์ฝ”๋“œ

 

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
32
33
34
35
36
37
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
 
using namespace std;
 
bool cmp1(const pair<stringpair<intvector<pair<intint>>>>& a, const pair<stringpair<intvector<pair<intint>>>>& b) {
    if(a.second.first == b.second.first) return a.first < b.first;
    return a.second.first > b.second.first;
}
 
bool cmp2(const pair<intint>& a, const pair<intint>& b) {
    if(a.second == b.second) return a.first < b.first;
    return a.second > b.second;
}
 
vector<int> solution(vector<string> genres, vector<int> plays) {
    vector<int> answer;
    unordered_map<stringpair<intvector<pair<intint>>>> m;
 
    for(int i = 0; i < genres.size(); i++) {
        m[genres[i]].first += plays[i]; // ์žฅ๋ฅด๋ณ„ ์žฌ์ƒ ํšŸ์ˆ˜ ์ฆ๊ฐ€
        m[genres[i]].second.push_back(make_pair(i, plays[i]));  // ์žฅ๋ฅด๋ณ„๋กœ ๋…ธ๋ž˜์˜ (๊ณ ์œ  ๋ฒˆํ˜ธ, ์žฌ์ƒ ํšŸ์ˆ˜) ์ €์žฅ
    }
 
    vector<pair<stringpair<intvector<pair<intint>>>>> v(m.begin(), m.end());
    sort(v.begin(), v.end(), cmp1); // ์žฅ๋ฅด๋ณ„ ์žฌ์ƒ ํšŸ์ˆ˜ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
 
    for(auto it: v) {
        sort(it.second.second.begin(), it.second.second.end(), cmp2);   // ์žฅ๋ฅด ๋‚ด ๋…ธ๋ž˜๋ณ„ ์žฌ์ƒ ํšŸ์ˆ˜ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
        answer.push_back(it.second.second[0].first);
        if(it.second.second.size() > 1) answer.push_back(it.second.second[1].first);
    }
 
    return answer;
}
cs

 

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

 

 

 

๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

 

 

 

728x90