https://school.programmers.co.kr/learn/courses/30/lessons/64065
셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수 있습니다.
튜플은 다음과 같은 성질을 가지고 있습니다.
원소의 개수가 n개이고, 중복되는 원소가 없는 튜플 (a1, a2, a3, ..., an)이 주어질 때(단, a1, a2, ..., an은 자연수), 이는 다음과 같이 집합 기호 '{', '}'를 이용해 표현할 수 있습니다.
예를 들어 튜플이 (2, 1, 3, 4)인 경우 이는
와 같이 표현할 수 있습니다. 이때, 집합은 원소의 순서가 바뀌어도 상관없으므로
는 모두 같은 튜플 (2, 1, 3, 4)를 나타냅니다.
특정 튜플을 표현하는 집합이 담긴 문자열 s가 매개변수로 주어질 때, s가 표현하는 튜플을 배열에 담아 return 하도록 solution 함수를 완성해주세요.
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] |
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
bool cmp(const pair<int, int> & a, const pair<int,int> & b){
if(a.second == b.second) return a.first > b.first;
return a.second > b.second;
}
vector<int> solution(string s) {
vector<int> answer;
map<int, int> mp;
string tmp = "";
for(auto i : s){
if(i != '{' && i != '}' && i != ','){
tmp += i;
} else {
if(tmp != ""){
mp[stoi(tmp)]++;
}
tmp = "";
}
}
vector<pair<int, int>> vec(mp.begin(), mp.end());
sort(vec.begin(), vec.end(), cmp);
for(auto i : vec){
answer.push_back(i.first);
}
return answer;
}
최대한 무식하게 풀었다.
bool cmp(const pair<int, int> & a, const pair<int,int> & b){
if(a.second == b.second) return a.first > b.first;
return a.second > b.second;
}
우선 이번 문제를 푸는 데 정말 중요한 코드다.
pair 객체의 값을 어떻게 비교하는 지에 대한 기준을 따로 불리언 함수로 뺴 둔다.
map<int, int> mp;
string tmp = "";
for(auto i : s){
if(i != '{' && i != '}' && i != ','){
tmp += i;
} else {
if(tmp != ""){
mp[stoi(tmp)]++;
}
tmp = "";
}
}
vector<pair<int, int>> vec(mp.begin(), mp.end());
sort(vec.begin(), vec.end(), cmp);
귀찮아서 그냥 Map을 활용했다. 다른 풀이들을 보니까 되게 다양한 방법이 있었지만,
필자는 그냥 귀찮아서 Map을 선언해서 얼마나 많은 데이터가 존재하는 지를 확인했다.
물론 이렇게만 해 버리면 어떤 데이터가 몇개 있는 지는 알 수 있어도 정렬하기 까다로워지끼 때문에 값을 정렬하기 위해 따로 map 값을 기반으로 vector를 선언 해 준다.
그 후 기존에 코딩 해 두었던 비교 함수를 기반으로 값을 정렬 해 주면 끝.
얼마나 많이 언급 되었는가? 가 1차 기준, 그 후는 사전순.