본문 바로가기

Algorithm/프로그래머스

[2019 카카오 개발자 겨울 인턴십] 튜플

https://programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이 문제는 주어진 문자열을 파싱하면서 각각의 숫자가 몇번 나오는지만 카운트하면 쉽게 풀린다.

자주 등장하는 숫자일수록 튜플의 앞쪽에 있는 숫자이기 때문이다.

따라서 각각의 숫자가 몇번 나오는지 카운트 한 뒤, 빈도수를 내림차순으로 정렬하면 구하고자 하는 답이 나온다.

(번거롭게 괄호, 쉼표까지 파싱할 필요가 없다)

 

빈도수를 저장하기 위해 unordered_map을 사용하였고

최종적으로 map의 원소들을 탐색하며 answer 배열에 잘 넣어주면 끝

 

#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

vector<int> solution(string s) {
	vector<int> answer;
	unordered_map<int, int> m;

	string str_num;
	for (char c : s) {
		if (c >= '0' && c <= '9') {
			str_num += c;
		}
		else if (!str_num.empty()) {
			int num = stoi(str_num);
			m[num]++;
			str_num.clear();
		}
	}

	int num_size = m.size();
	answer.resize(num_size);

	for (auto a : m) {
		answer[num_size - a.second] = a.first;
	}

	return answer;
}