문제 링크입니다: 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을 이용하여 답을 구해줍니다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |

개발환경: 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 |