베스트앨범

108번뇌·2021년 8월 3일
0

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


얼핏 볼때 쉬어보이는데 못풀었다.

1.맵채우기
map<string, int> genre_cnt;//장르별 재생 횟수
genre_cnt[genres[i]] += plays[i];

2.맵 응용
map < string, vector<pair<int, int>>> genre_playlist;
genre_playlist[genres[i]].push_back(make_pair(plays[i], i));

3.벡터복사
genre_v.assign(genre_cnt.begin(), genre_cnt.end());

내가 평소에 별로 안다루는 방식인데,
이문제 힙 유형으로 여러번 더 풀어볼 가치있음.

#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

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

bool cmp_song_cnt(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> genre_cnt;//장르별 재생 횟수
	map < string, vector<pair<int, int>>> genre_playlist;//장르별 노래의 재생횟수 및 고유번호
	vector<pair<string, int>> genre_v;//장르별 노래갯수

		for (int i = 0; i < genres.size(); i++)
		{
			genre_cnt[genres[i]] += plays[i];

			genre_playlist[genres[i]].push_back(make_pair(plays[i], i));
		}


		map < string, vector<pair<int, int>>>::iterator itr;

		for (itr = genre_playlist.begin(); itr != genre_playlist.end(); itr++)//재생횟수를 이용한 내림차순 정렬
		{
			sort(itr->second.begin(), itr->second.end(), cmp);
		}

		genre_v.assign(genre_cnt.begin(), genre_cnt.end());
		sort(genre_v.begin(), genre_v.end(), cmp_song_cnt);

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


			for (int j = 0; (j < genre_playlist[genre_name].size() && j < 2); j++)
			{
				answer.push_back(genre_playlist[genre_name][j].second);
			}
		}



		return answer;
}
profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글