programmers.co.kr/learn/courses/30/lessons/42579
너무 복잡하게 풀어서 일단 풀기는 했지만 뭔가 찝찝하다.
IDE없이 풀려니까 어디가 문제인지도 안나오고 프로그래머스에서 풀 때 sort 오름차순, 내림차순 정렬 greater, less 추가하면 자꾸 오류나서 직접 비교 함수까지 추가했다.
map을 이용해서 장르 별로 총 몇 번 재생했는지 저장하고 (m)
그 m에 있는 정보를 정렬하기 위해서 또 re_m에다가 m의 키값과 value를 순서를 바꿔 저장했다.
이 때 map정렬을 따로 추가하는 게 귀찮아서 어차피 재생 횟수는 마이너스가 안되니까 -1을 곱해서 내림차순으로 저장했다.
그리고 나서 가장 많이 재생된 장르 순대로 하나씩 꺼내서 장르별로 횟수와 고유번호를 넣고 (v에) 정렬을 해줬다.
iter를 2개까지만 끊어야 해서 idx변수를 추가로 써서 idx가 2면 break하게 하는 방식으로 answer에 넣어줬다.
bool cmp(const pair<int, int> &a, const pair<int, int> &b)
{
return a.first > b.first;
}
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
int song_cnt = genres.size();
map<string, int> m;
map<int, string> re_m;
for(int i=0;i<song_cnt;++i)
{
m[genres[i]] += plays[i];
}
for(auto iter = m.begin(); iter != m.end(); ++iter)
{
re_m.insert(make_pair((iter->second)*-1, iter->first));
}
for(auto iter = re_m.begin(); iter != re_m.end();++iter)
{
vector<pair<int, int>> v;
for(int i=0;i<song_cnt;++i)
{
if(genres[i] == iter->second)
{
v.push_back(make_pair(plays[i], i));
}
}
sort(v.begin(), v.end(), cmp);
int idx = 0;
for(auto v_iter = v.begin(); v_iter != v.end() ; ++v_iter)
{
++idx;
answer.push_back(v_iter->second);
if(idx >= 2)
{
break;
}
}
}
return answer;
}
'알고리즘 & 자료구조 > 프로그래머스' 카테고리의 다른 글
[C++/알고리즘] 프로그래머스 (하노이의 탑) (0) | 2020.10.08 |
---|---|
[C++/알고리즘] 프로그래머스 (구명보트) (0) | 2020.10.08 |
[C++/알고리즘] 프로그래머스 (네트워크) (0) | 2020.10.08 |
[C++/알고리즘] 프로그래머스 (폰켓몬) (0) | 2020.10.08 |
[C++/알고리즘] 프로그래머스 (두 개 뽑아서 더하기) (0) | 2020.10.08 |