프로그래머스(Programmers)

프로그래머스 튜플 C++

cosmohoo 2022. 1. 14. 20:25
반응형

문제설명

 

[제한사항]

  • s의 길이는 5 이상 1,000,000 이하입니다.
  • s는 숫자와 '{', '}', ',' 로만 이루어져 있습니다.
  • 숫자가 0으로 시작하는 경우는 없습니다.
  • s는 항상 중복되는 원소가 없는 튜플을 올바르게 표현하고 있습니다.
  • s가 표현하는 튜플의 원소는 1 이상 100,000 이하인 자연수입니다.
  • return 하는 배열의 길이가 1 이상 500 이하인 경우만 입력으로 주어집니다.

[입출력 예]

s                                                                                                                                             result

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4]
"{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4]
"{{20,111},{111}}" [111, 20]
"{{123}}" [123]
"{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

입출력 예에 대한 설명입출력 예 #1

문제 예시와 같습니다.

입출력 예 #2

문제 예시와 같습니다.

입출력 예 #3

(111, 20)을 집합 기호를 이용해 표현하면 {{111}, {111,20}}이 되며, 이는 {{20,111},{111}}과 같습니다.

입출력 예 #4

(123)을 집합 기호를 이용해 표현하면 {{123}} 입니다.

입출력 예 #5

(3, 2, 4, 1)을 집합 기호를 이용해 표현하면 {{3},{3,2},{3,2,4},{3,2,4,1}}이 되며, 이는 {{4,2,3},{3},{2,3,4,1},{2,3}}과 같습니다.

 

#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>

using namespace std;

bool cmp(pair<int, int> a, pair<int, int> b)
{
    return a.second >b.second;
}

vector<int> solution(string s) {
    vector<int> answer;
    map<int, int> mp; // key : 숫자, value : 호출횟수
    string tmp="";
    for(int i=0; i<s.length(); i++)
    {
        
        if(s[i] == '{' || s[i] == '}' || s[i] == ',')
        {
            if(tmp!="")
            {
                int key = stoi(tmp);
                mp[key]++;
                tmp="";
            }
            continue;
        }
        else
        {
            tmp +=s[i];
        }
    }
    cout << mp.size();
    vector<pair<int, int>> mpVector;
    for(auto mpPair : mp)
    {
        mpVector.push_back(mpPair);
    }
    
    sort(mpVector.begin(), mpVector.end(),cmp);
  
    for(int i=0; i<mpVector.size(); i++)
    {
        answer.push_back(mpVector[i].first);
    }
        return answer;
}

 

=> MAP STL을 사용하여 풀었습니다. 

=> 예시를 보면 앞에 있는 숫자일수록, 호출된 횟수가 많습니다. 

=> 이를 이용하여 MAP을 이용해 각 원소가 몇번 호출되었는지 세었습니다. 

=> 그이후 pair<int,int>형 vector를 선언하여 map에 있는 값들을 집어넣었고, sort함수를 사용하여 원하는대로 정렬하였습니다. 

=> 원하는대로 정렬하기 위해 cmp함수를 생성하여 정렬하였습니다. 

 

 

반응형