알고리즘/programmers

[Programmers] 튜플

꾸준함. 2022. 2. 9. 18:24

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/64065

 

코딩테스트 연습 - 튜플

"{{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] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

해쉬 자료구조를 적절히 이용하면 쉽게 풀 수 있는 문제였습니다.

 

알고리즘은 아래와 같습니다.

1. 문자열을 파싱하여 set에 등장한 숫자들을 저장하고 map에 숫자가 몇 번 등장했는지 저장합니다.

2. 튜플의 순서는 숫자가 등장한 순서대로이므로 1번에서 도출한 set과 map을 이용하여 답을 구해줍니다.

 

#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
using namespace std;
bool cmp(pair<int, int> a, pair<int, int> b)
{
return a.second > b.second;
}
vector<int> solution(string s) {
set<int> tupleSet;
map<int, int> visited;
string temp;
for (char c : s)
{
if (c == '{' || c == '}' || c == ',')
{
if (!temp.empty())
{
tupleSet.insert(stoi(temp));
visited[stoi(temp)]++;
temp.clear();
}
continue;
}
temp += c;
}
vector<pair<int, int>> v;
for (auto t : tupleSet)
{
v.push_back({t, visited[t]});
}
sort(v.begin(), v.end(), cmp);
vector<int> answer;
for (pair<int, int> a : v)
{
answer.push_back(a.first);
}
return answer;
}
view raw .cpp hosted with ❤ by GitHub

 

개발환경: Programmers IDE

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > programmers' 카테고리의 다른 글

[Programmers] 후보키  (0) 2022.02.12
[Programmers] 순위 검색  (0) 2022.02.11
[Programmers] 수식 최대화  (0) 2022.02.02
[Programmers] 거리두기 확인하기  (0) 2022.01.31
[Programmers] [1차] 뉴스 클러스터링  (0) 2022.01.30