https://school.programmers.co.kr/learn/courses/30/lessons/42579
๋ฌธ์ ์ค๋ช
์คํธ๋ฆฌ๋ฐ ์ฌ์ดํธ์์ ์ฅ๋ฅด ๋ณ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์๋ ๋ ธ๋๋ฅผ ๋ ๊ฐ์ฉ ๋ชจ์ ๋ฒ ์คํธ ์จ๋ฒ์ ์ถ์ํ๋ ค ํฉ๋๋ค. ๋ ธ๋๋ ๊ณ ์ ๋ฒํธ๋ก ๊ตฌ๋ถํ๋ฉฐ, ๋ ธ๋๋ฅผ ์๋กํ๋ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ํ ๋ ธ๋๊ฐ ๋ง์ด ์ฌ์๋ ์ฅ๋ฅด๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
- ์ฅ๋ฅด ๋ด์์ ๋ง์ด ์ฌ์๋ ๋ ธ๋๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
- ์ฅ๋ฅด ๋ด์์ ์ฌ์ ํ์๊ฐ ๊ฐ์ ๋ ธ๋ ์ค์์๋ ๊ณ ์ ๋ฒํธ๊ฐ ๋ฎ์ ๋ ธ๋๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
๋ ธ๋์ ์ฅ๋ฅด๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด genres์ ๋ ธ๋๋ณ ์ฌ์ ํ์๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด plays๊ฐ ์ฃผ์ด์ง ๋, ๋ฒ ์คํธ ์จ๋ฒ์ ๋ค์ด๊ฐ ๋ ธ๋์ ๊ณ ์ ๋ฒํธ๋ฅผ ์์๋๋ก return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์๊ทผ ๊น๋ค๋ก์ด ๋ฌธ์ ์ธ๋ฐ ์ผ๋จ map ์๋ฃํ์ ๋ค๋ฃฐ ์ค ์์์ผ ํ๊ณ ,
์ด๋ฅผ ์ ๋ ฌํ๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ์์์ผ ํ๋ค. ใ ใ
map์ ๊ธฐ๋ณธ์ ์ผ๋ก key ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ๋๋ค.
๋ฐ๋ผ์ key ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ์ํด์๋ map ์ ์ธ ์ greater<์๋ฃํ> ์์ฑ์ ๋ฃ์ด์ค์ผํจ!!
๊ทธ๋ฆฌ๊ณ value ๊ธฐ์ค ์ ๋ ฌ์ ์ํด์๋ map์ vector๋ก ๋ฐ๊ฟ์ ์ ๋ ฌํจ์๋ฅผ ๋ฐ๋ก ์ ์ธํด์ค์ผ ํ๋ค.
๋์ ํ์ด
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool comp(pair<string,int> a, pair<string,int> b){
return a.second > b.second;
}
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
map<string,int> plist; // ์ฅ๋ฅด๋ณ ์ด ์ฌ์ํ์
map<pair<int,int>,string,greater<pair<int,int>> > pnums; //key๋ด๋ฆผ์ฐจ์ ์๋์ ๋ ฌ
for(int i=0; i<genres.size();++i){
plist[genres[i]] += plays[i];
pnums[{plays[i], genres.size()-1-i}] = genres[i];
}
vector<pair<string,int> > v(plist.begin(),plist.end());
sort(v.begin(),v.end(),comp); // value ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
for(int i=0; i<v.size();++i){ // ์ฅ๋ฅด ์ ํ
string g = v[i].first;
int cnt=0;
for(auto j : pnums){
if(j.second == g){
int a = j.first.second;
answer.push_back(genres.size()-1-a);
cnt++;
}
if(cnt==2) break;
}
}
return answer;
}
+ resolve ํ์ด
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool compare(pair<string, int> a, pair<string, int> b){
return a.second > b.second;
}
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
map<string, int> mgenres;
map<pair<int,int>,string, greater<pair<int,int>> > mplays;
for(int i=0; i<genres.size(); ++i){
mgenres[genres[i]] += plays[i];
mplays[{plays[i],10000-i}] = genres[i]; // {์ฌ์ํ์,10000-๊ณ ์ ๋ฒํธ}
}
// mgenres -> value์ ๋ฐ๋ผ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ์ํด vector๋ก ๋ณํ
vector<pair<string, int>> v(mgenres.begin(), mgenres.end());
sort(v.begin(), v.end(), compare);
for(auto g:v){
int cnt=0;
string gen = g.first;
for(auto p:mplays){
if(p.second == gen){
int a = 10000-p.first.second;
answer.push_back(a);
cnt++;
}
if(cnt==2) break;
}
}
return answer;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/PGS] Lv.2 : ํผ๋ก๋ (์์ ํ์) (0) | 2023.05.26 |
---|---|
[C++/PGS] Lv.2 : ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ (ํ) (0) | 2023.04.13 |
[C++/PGS] Lv.2 : ์์/์์ฅ (ํด์) (0) | 2023.04.13 |
[C++/PGS] Lv.2 : ์ ํ๋ฒํธ ๋ชฉ๋ก (ํด์) (0) | 2023.04.13 |
[C++/PGS] Lv.? : ์ํธ ํ๊ฐ (๋ค์ด๋ฒ ๊ธฐ์ถ) (0) | 2023.04.13 |