https://school.programmers.co.kr/learn/courses/30/lessons/64065
구현 아이디어 2분 구현 18분
한번 풀었던 문제라고 급하게 접근했다가 피 봤다. 어찌됐든 예전에 비해 시간이 전혀 줄지 않았다니... 분발해야겠다.
#include <string>
#include <vector>
#include <queue>
#include <map>
using namespace std;
struct Data
{
int num, cnt;
Data(int num, int cnt)
{
this->num = num;
this->cnt = cnt;
}
bool operator<(const Data& b) const
{
return cnt < b.cnt;
}
};
vector<int> solution(string s) {
vector<int> answer;
priority_queue<Data> pQ;
map<int, int> m;
int tmp = -1, mul = 10;
for(int i = 0; i < s.length(); ++i)
{
if(s[i] >= '0' && s[i] <= '9')
{
if(tmp == -1) tmp = 0;
tmp = tmp * mul + (s[i] - '0');
}
else
{
if(-1 != tmp) m[tmp]++;
tmp = -1;
}
}
// map의 원소를 pQ에 넣자.
for(auto& it : m)
pQ.push(Data(it.first, it.second));
while(!pQ.empty())
{
answer.push_back(pQ.top().num);
pQ.pop();
}
return answer;
}