튜플(19분)

myeongrangcoding·2023년 11월 12일

프로그래머스

목록 보기
1/65

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

10분 문제 이해 9분 구현

  1. 처음 짠 코드. map을 2중으로 돌며 정렬한다. 정렬에서 상당히 비효율적인 코드라 생각되어 다른 사람들의 코드를 살펴봤다.
#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;
}
  1. vector<pair<int, int>>를 활용한 정렬
#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;
}
  1. 추가로 맵의 value를 정렬하는 법을 찾아봤는데 vector 컨테이너에 value를 한 번 옮겨 정렬하면 된다.
profile
명랑코딩!

0개의 댓글