프로그래머스 - 베스트 앨범.

phoenixKim·2021년 8월 12일
0

multimap의 한계

: first 값만으로 정렬이 가능하므로, multimap으로 풀경우 머리 아파진다...
second값은 삽입 순서로만 나온다.

억지로 만든 소스코드

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


bool check(pair<int, int> a, pair<int, int>b)
{
	if (a.first == b.first)
		return a.second > b.second;
	return a.first > b.first;

}


vector<int> solution(vector<string> genres, vector<int> plays) {
	vector<int> answer;

	multimap<string, pair<int, int>>mm;
	map<string, int> m;

	for (int i = 0; i < plays.size(); i++)
	{
		m[genres[i]] += plays[i];
		mm.insert(make_pair(genres[i], make_pair(plays[i], i)));
	}

	map<int, string, greater<int>>revM;

	//역으로 변경함. 숫자 - string으로 저장시킴.
	for (const auto & i : m)
		revM[i.second] = i.first;

	
	for (const auto &i : revM)
	{
		vector<pair<int, int>>v;
		auto iter = mm.find(i.second);
		while(iter != mm.end() && iter->first == i.second)
		{
			v.push_back({ iter->second.first, iter->second.second });
			iter++;
		}
		
		sort(v.begin(), v.end(), check);
		
		for (int i = 0; i < v.size(); i++)
		{
			if (i == 2)
				break;
			answer.push_back(v[i].second);
		}
	}
		


	return answer;
}

젠장!!!

조건식 잘못썻다.

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


bool check(pair<int, int> a, pair<int, int>b)
{
    //부등호 중요하다.... 노래 수록 기준 3번 
	if (a.first == b.first)
		return a.second < b.second;
	return a.first > b.first;

}


vector<int> solution(vector<string> genres, vector<int> plays) {
	vector<int> answer;

	multimap<string, pair<int, int>>mm;
	map<string, int> m;

	for (int i = 0; i < plays.size(); i++)
	{
		m[genres[i]] += plays[i];
		mm.insert(make_pair(genres[i], make_pair(plays[i], i)));
	}

	map<int, string, greater<int>>revM;

	//역으로 변경함. 숫자 - string으로 저장시킴.
	for (const auto & i : m)
		revM[i.second] = i.first;

	
	for (const auto &i : revM)
	{
		vector<pair<int, int>>v;
		auto iter = mm.find(i.second);
		while(iter != mm.end() && iter->first == i.second)
		{
			v.push_back({ iter->second.first, iter->second.second });
			iter++;
		}
		
		sort(v.begin(), v.end(), check);
		
		for (int i = 0; i < v.size(); i++)
		{
			if (i == 2)
				break;
			answer.push_back(v[i].second);
		}
	}
		


	return answer;
}

profile
🔥🔥🔥

0개의 댓글

관련 채용 정보