[2023년 11월 22일]튜플(20분)

myeongrangcoding·2023년 11월 22일

프로그래머스

목록 보기
39/65

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;
}
profile
명랑코딩!

0개의 댓글