튜플 : 문제 링크
- (a1, a2, a3, ..., an)
- 중복된 원소가 있을 수 있다. ex : (2, 3, 1, 2)
- 원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서로 다른 튜플이다. ex : (1, 2, 3) ≠ (1, 3, 2)
- 튜플의 원소 개수는 유한한다.
- {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}
- {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
- {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
- {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}
- {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}
는 모두 같은 튜플 (2, 1, 3, 4)를 나타낸다. 특정 튜플을 표현하는 집합이 담긴 문자열 s가 매개변수로 주어질 때, s가 표현하는 튜플을 배열에 담아 return 하도록 solution 함수를 완성
제한 사항
- s의 길이는 5 이상 1,000,000 이하이다.
- s는 숫자와 '{', '}', ',' 로만 이루어져 있다.
- 숫자가 0으로 시작하는 경우는 없다.
- s는 항상 중복되는 원소가 없는 튜플을 올바르게 표현하고 있다.
- s가 표현하는 튜플의 원소는 1 이상 100,000 이하인 자연수이다.
- return 하는 배열의 길이가 1 이상 500 이하인 경우만 입력으로 주어진다.
algorithm 헤더의 sort() 함수 사용법
void sort(T start, T end, Compare comp); //comp 인자가 공란이면 오름차순 정렬
- sort(v.begin(), v.end(), compare); // 사용자 정의 함수 사용
- sort(v.rbegin(), v.rend()); // 내림차순
- sort(v.begin(), v.end(), greater<자료형>()); // 내림차순
- sort(v.begin(), v.end(), less<자료형>()); // 오름차순
unordered_map
map의 해시 테이블 버전이다. <unordered_map> 헤더에 다음과 같이 정의되어 있다.template< typename _Kty, typename _Ty, typename _Hasher = std::hash<_Kty>, typename _Keyeq = std::equal_to<_Kty>, typename _Alloc = std::allocator<std::pair<const _Kty, _Ty>> class unordered_set;
map의 인터페이스를 모두 포함하고 있으며 추가적으로 HashTable 관련 인터페이스들을 제공한다.
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
vector<int> solution(string s) {
unordered_map<int, int> m;
vector<int> answer;
for(int i = 2; i < s.size() - 2; ++i) {
if('0' <= s[i] && s[i] <= '9') {
m[stoi(s.substr(i))]++;
while('0' <= s[i] && s[i] <= '9') i++;
}
}
vector<pair<int, int>> mtov(m.begin(), m.end());
sort(mtov.begin(), mtov.end(), [](const pair<int, int>& a, const pair<int, int>& b) {
return a.second > b.second;
});
for(int i = 0; i < mtov.size(); ++i) answer.push_back(mtov[i].first);
return answer;
}