https://programmers.co.kr/learn/courses/30/lessons/64065
이 문제는 주어진 문자열을 파싱하면서 각각의 숫자가 몇번 나오는지만 카운트하면 쉽게 풀린다.
자주 등장하는 숫자일수록 튜플의 앞쪽에 있는 숫자이기 때문이다.
따라서 각각의 숫자가 몇번 나오는지 카운트 한 뒤, 빈도수를 내림차순으로 정렬하면 구하고자 하는 답이 나온다.
(번거롭게 괄호, 쉼표까지 파싱할 필요가 없다)
빈도수를 저장하기 위해 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;
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[2020카카오공채] 블록 이동하기 (0) | 2020.04.04 |
---|---|
[2020카카오공채] 외벽 점검 (0) | 2020.04.03 |
[2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임 (0) | 2020.04.02 |
[2019 카카오 개발자 겨울 인턴십] 징검다리 건너기 (0) | 2020.04.02 |
[2019 카카오 개발자 겨울 인턴십] 호텔 방 배정 (0) | 2020.04.02 |