C++:: 프로그래머스 < 튜플 >

jahlee·2023년 7월 3일
1

프로그래머스_Lv.2

목록 보기
64/106
post-thumbnail

처음에는 직접 s에서 숫자들을 따로 빼주면서 튜플에대한 접근을 하려 하였지만 생각해보니 규칙적인 풀이가 존재하여서 다음과 같이 풀었다.
해당 풀이의 핵심은 문자열에서 등장하는 숫자들이 중복되지않게 인자가 된다는 점과 많이 등장한 숫자일수록 튜플의 앞에 값이라는 점이다.
예시로 입력이 "{{2},{2,1},{2,1,3},{2,1,3,4}}" 이면
2 => 4
1 => 3
3 => 2
4 => 1 번 나온다는 것을 알수있다. 많이 등장한 순으로 배열에 넣어줘서 리턴해주면 된다.

#include <string>
#include <vector>
#include <unordered_map>
using namespace std;

vector<int> solution(string s) {
    unordered_map<int, int> m;
    for (int i=2; i<s.size(); i++) {
        if (isdigit(s[i])) {// 숫자면
            m[stoi(s.substr(i))]++;// 정수로 바꿔준값을 맵에 ++해준다.
            while (isdigit(s[i]))// 숫자 아닐때까지 밀어준다.
                i++;
        }
    }
    int size = m.size();// 등장하는 수의 개수
    vector<int> answer(size);
    for (auto c : m) answer[size - c.second] = c.first;// size - c.second 가 곧 인덱스이다.
    return answer;
}

0개의 댓글