알고리즘/프로그래머스
2019 카카오 인턴쉽 코딩테스트 2번 튜플
내이름은 킹햄찌
2022. 6. 1. 23:44
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
2019 카카오 인턴쉽 코딩테스트에 출제되었었던 튜플 문제이다.
위 링크를통하여 프로그래머스에서 풀어볼 수 있다.
아이디어
본인만 그런건지 모르겠는데 문제 이해하기가 정말 어려웠다. 문제 이해가 안되서 구글링해서 설명을 보고서야 이해를 했고, 풀이 자체는 어렵지 않았다. 숫자를 받아서 전부 unordered_map에 넣었고 중복은 카운트를 증가시켜서 가장 자주 나오는 숫자가 앞쪽으로 배치 되어야하기 때문에 정렬을 이용해서 튜플을 구해냈다.
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
bool cmp(pair<int, int>a, pair<int, int> b) {
return a.first > b.first;
}
vector<int> solution(string s) {
vector<int> answer;
unordered_map<string, int>m;
vector<pair<int, int>> temp;
string nums = "";
for (auto num : s) {
if (num >= '0' && num <= '9') {
nums.push_back(num);
continue;
}
if (nums.size() > 0) {
m[nums]++;
nums.clear();
}
}
for (auto nums : m)
temp.push_back({ nums.second, stoi(nums.first) });
sort(temp.begin(), temp.end(), cmp);
for (auto num : temp)
answer.push_back(num.second);
return answer;
}