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


풀음~

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

vector<int> solution(string s) {
	vector<int> answer;
	vector<vector<int>> vvTemp;
	vector<int> vTemp;
	int flag(0);
	string sTemp = "";
	for (int i = 1; i < s.size() - 1; i++)//맨처음과 맨뒤는 뺀다.
	{
		if (s[i] == '{')
		{
			continue;
		}
		else if (s[i] == '}')
		{
			vTemp.push_back(stoi(sTemp));
			sTemp = "";
			vvTemp.push_back(vTemp);
			vTemp.clear();
		}
		else if (s[i] >= '0' &&s[i] <= '9')
		{
			sTemp += s[i];
			continue;
		}
		else if (s[i] == ',' && s[i - 1] != '}' && i >= 1)
		{
			vTemp.push_back(stoi(sTemp));
			sTemp = "";
		}
	}

	for (int i = 0; i < vvTemp.size(); i++)
	{
		sort(vvTemp[i].begin(), vvTemp[i].end(), [](int a, int b)
		{
			return a < b;
		});
	}

	map<int, int> m_Con;
	for (int i = 0; i < vvTemp.size(); i++)
	{
		for (int j = 0; j < vvTemp[i].size(); j++)
		{
			m_Con[vvTemp[i][j]]++;
		}
	}

	map<int, int>::iterator m_itr;
	vector<pair<int, int>> vpTemp;
	for (m_itr = m_Con.begin(); m_itr != m_Con.end(); m_itr++)
	{
		vpTemp.push_back(make_pair(m_itr->first, m_itr->second));
	}

	sort(vpTemp.begin(), vpTemp.end(), [](pair<int, int> a, pair<int, int>b) {
		return a.second > b.second;
	});

	for (int i = 0; i < vpTemp.size(); i++)
	{
		answer.push_back(vpTemp[i].first);
	}


	return answer;
}
int main()
{
	string s1 = "{{1,2,3},{2,1},{1,2,4,3},{2}}";


	vector<int> vTemp = solution(s1);

	return 0;
}
  1. 문자열 다 잘라서 2차원 벡터로 넣는다.
  2. 2차원 벡터에서 모든 원소들을 map에 넣으며 카운팅한다.
  3. 맵에서 벨류값이 가장 많은 숫자에서 내림차순으로 정렬
  4. answer에 first 대입.
profile
내일 아침 눈을 떳을 때, '기대되는 오늘 하루를 만들기 위해' 나는 오늘도 생각하고 고민한다.

0개의 댓글