ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 튜플 C++
    프로그래머스(Programmers) 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함수를 생성하여 정렬하였습니다. 

     

     

    반응형

    '프로그래머스(Programmers)' 카테고리의 다른 글

    예산  (0) 2022.01.21
    신고 결과 받기 C++  (0) 2022.01.17
    프로그래머스 3진법 뒤집기 C++  (0) 2022.01.13
    프로그래머스 H-Index C++  (0) 2022.01.12
    괄호변환 C++  (0) 2022.01.11

    댓글

Designed by Who.