[C++로 풀이] 튜플 ⭐⭐

Date:     Updated:

카테고리:

태그:

📌 튜플

난이도 ⭐⭐

🚀 문제

image

image


🚀 내 풀이 ⭕

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

using namespace std;

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

vector<int> solution(string s) {
    vector<int> answer;
    map<int, int> count;
    
    string oneNumStr = "";
    for(int i = 0; i < s.length() - 1; i++)
    {
        if (s[i] >= '0' && s[i] <= '9')
            oneNumStr += s[i];
        
        // 하나의 숫자가 다 끝난 경우 1. } 등장 2. , 등장이긴한데 앞에 숫자 있었을 때
        if (s[i] == '}' || (s[i] == ',' && oneNumStr != ""))
        {
            count[stoi(oneNumStr)]++;
            oneNumStr = "";
        }
    }
    
    vector<pair<int, int>> sortByValue(count.begin(), count.end()); // count map을 vector sortByBalue에 복사
    sort(sortByValue.begin(), sortByValue.end(), compare);
    
    for(int i = 0; i < sortByValue.size(); i++)
        answer.push_back(sortByValue[i].first);
    
    return answer;  
}

가장 많이 등장한 수가 가장 앞에 있는 인덱스의 원소가 될 것이다. 반대로 딱 한번 등장한 수는 가장 뒤에 있는 인덱스의 원소가 될 것이다.

  • count mapKey : 원소, Value : 등장 횟수 로 저장이 될 것이다.
    • Value를 기준으로한 내림 차순 정렬을 진행해야 한다. 👉 Key를 기준으로한 정렬은 가능하지만 Value 를 기준으로 한 map 자체의 정렬은 불가능하기에 pair를 원소로 하는 vector에 이 map의 Key와 Value를 모두 복사한 후 이 vector를 Value (second) 기준으로 내림차순 정렬하면 된다.
      • 그리고 이 벡터의 원소 값들을 answer에 넣으면 끝!


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Programmers 카테고리 내 다른 글 보러가기

댓글 남기기