https://school.programmers.co.kr/learn/courses/30/lessons/64065
10분 문제 이해 9분 구현
#include <string>
#include <vector>
#include <map>
using namespace std;
struct Data
{
int n;
Data(int n)
{
this->n = n;
}
};
vector<int> solution(string s) {
vector<int> answer;
map<int, int> m;
// 숫자인 경우만 골라 map에 넣고 정렬한다.
int num = 0;
for(int i = 0; i < s.length(); ++i)
{
if('0' <= s[i] && '9' >= s[i])
{
num = (num * 10) + (s[i] - '0');
}
else
{
if(num)
{
m[num]++;
num = 0;
}
}
}
int N = m.size();
auto l = m.begin();
for(; l != m.end(); ++l)
{
auto iter = m.begin();
int maxi = -2147000000;
int idx = -1;
for(; iter != m.end(); ++iter)
{
if(maxi < iter->second)
{
maxi = iter->second;
idx = iter->first;
}
}
m[idx] = 0;
answer.push_back(idx);
}
return answer;
}
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int numbers[100001];
vector<int> solution(string s) {
vector<int> answer;
string str;
for(int i = 0; i < s.length(); ++i)
{
if(s[i] >= '0' && s[i] <= '9')
str += s[i];
else
{
if(!str.empty())
{
numbers[stoi(str)]++;
str.clear();
}
}
}
vector<pair<int, int>> p;
for(int i = 0; i < 100001; ++i)
{
if(numbers[i])
{
p.push_back({numbers[i], i});
}
}
sort(p.begin(), p.end());
reverse(p.begin(), p.end());
for(auto iter : p)
{
answer.push_back(iter.second);
}
return answer;
}