프로그래머스(Programmers)
프로그래머스 튜플 C++
cosmohoo
2022. 1. 14. 20:25
반응형
[제한사항]
- s의 길이는 5 이상 1,000,000 이하입니다.
- s는 숫자와 '{', '}', ',' 로만 이루어져 있습니다.
- 숫자가 0으로 시작하는 경우는 없습니다.
- s는 항상 중복되는 원소가 없는 튜플을 올바르게 표현하고 있습니다.
- s가 표현하는 튜플의 원소는 1 이상 100,000 이하인 자연수입니다.
- return 하는 배열의 길이가 1 이상 500 이하인 경우만 입력으로 주어집니다.
[입출력 예]
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] |
입출력 예에 대한 설명입출력 예 #1
문제 예시와 같습니다.
입출력 예 #2
문제 예시와 같습니다.
입출력 예 #3
(111, 20)을 집합 기호를 이용해 표현하면 {{111}, {111,20}}이 되며, 이는 {{20,111},{111}}과 같습니다.
입출력 예 #4
(123)을 집합 기호를 이용해 표현하면 {{123}} 입니다.
입출력 예 #5
(3, 2, 4, 1)을 집합 기호를 이용해 표현하면 {{3},{3,2},{3,2,4},{3,2,4,1}}이 되며, 이는 {{4,2,3},{3},{2,3,4,1},{2,3}}과 같습니다.
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
bool cmp(pair<int, int> a, pair<int, int> b)
{
return a.second >b.second;
}
vector<int> solution(string s) {
vector<int> answer;
map<int, int> mp; // key : 숫자, value : 호출횟수
string tmp="";
for(int i=0; i<s.length(); i++)
{
if(s[i] == '{' || s[i] == '}' || s[i] == ',')
{
if(tmp!="")
{
int key = stoi(tmp);
mp[key]++;
tmp="";
}
continue;
}
else
{
tmp +=s[i];
}
}
cout << mp.size();
vector<pair<int, int>> mpVector;
for(auto mpPair : mp)
{
mpVector.push_back(mpPair);
}
sort(mpVector.begin(), mpVector.end(),cmp);
for(int i=0; i<mpVector.size(); i++)
{
answer.push_back(mpVector[i].first);
}
return answer;
}
=> MAP STL을 사용하여 풀었습니다.
=> 예시를 보면 앞에 있는 숫자일수록, 호출된 횟수가 많습니다.
=> 이를 이용하여 MAP을 이용해 각 원소가 몇번 호출되었는지 세었습니다.
=> 그이후 pair<int,int>형 vector를 선언하여 map에 있는 값들을 집어넣었고, sort함수를 사용하여 원하는대로 정렬하였습니다.
=> 원하는대로 정렬하기 위해 cmp함수를 생성하여 정렬하였습니다.
반응형