알고리즘/프로그래머스

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;
}