728x90
코딩테스트 연습 - 튜플 | 프로그래머스 스쿨 (programmers.co.kr)
#include <string>
#include <vector>
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
bool cmp(pair<int,int> &a, 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;
int i = 0;
int now = 0;
while(s[i])
{
if('0' <= s[i] && s[i] <= '9')
{
now = i;
for(int j = i; j < s.size(); j++)
{
if(s[j] == ',' || s[j] == '}')
{
mp[stoi(s.substr(now, j))]++;
i = j;
break;
}
}
}
else i++;
}
vector<pair<int, int>>vec(mp.begin(), mp.end());
sort(vec.begin(), vec.end(), cmp);
for(auto num:vec)
answer.push_back(num.first);
return answer;
}
문풀 방식
우선 튜플이 정렬되는 방식이 가장 많이 등장하는 숫자부터 vector에 정렬되어야 했다.
그러려면 등장하는 횟수를 저장해야 했는데 그럴때는 역시 map이 좋다.
while문으로 문자열을 훑으면서 숫자가 나올 경우 인덱스를 증가시켜 }이나 ,이 나올 때까지 받고 난 후에
그 때까지의 문자열을 자르고 stoi로 int형 정수로 변환하여 map에서 해당 값을 증가시켰다.
이렇게 map이 다 생성되고 난 후에는
<int, int>라는 형태의 배열에 맵의 처음부터 끝까지 그대로 집어넣는다.
그리고 cmp라는 함수로 second기준으로 정렬하여 sort하고
그 이후에 마지막으로 만들어진 vec의 first값들을 차례대로 answer벡터에 넣어주었다.
728x90
'알고리즘 공부(C++)' 카테고리의 다른 글
[C++]프로그래머스 다리를 지나는 트럭 (0) | 2023.10.16 |
---|---|
[C++]프로그래머스 양궁대회 (0) | 2023.10.10 |
[C++] 프로그래머스 광물 캐기 (2) | 2023.10.09 |
[C++]프로그래머스 여행경로 (0) | 2023.09.24 |
[C++]프로그래머스 부대복귀 (0) | 2023.09.20 |