프로그래머스 2019 카카오개발자 겨울 인턴십 튜플
by 진혀크
문제설명
https://programmers.co.kr/learn/courses/30/lessons/64065
위의 링크를 참고해주시면 감사하겠습니다!
접근
- 우선 문자열에서 숫자를 적절히 잘 뽑아내는 것이 중요할 것이라 생각했다.
- 숫자를 세서 가장 많은 숫자 순으로 튜플에 넣어주면 될 것이라 생각했다.
내가 생각한 풀이
- 접근과 같이 수행한다. 정렬을 쉽게 하기 위해 map을 사용한다.
- map의 key는 숫자의 갯수이고 (튜플 특성상 숫자별로 갯수가 다 다르다.) value는 그에 해당하는 숫자이다.
코드
#include <string>
#include <vector>
#include <iostream>
#include <map>
using namespace std;
vector<int> solution(string s) {
vector<int> answer;
int check[100001] = {0, }, max_num = 0;
for(int i = 0 ; i<s.size() ; i++)
{
if(s[i] < '0' && s[i] > '9') continue;
else
{
string temp = "";
while(s[i] >= '0' && s[i] <='9')
{
temp+=s[i];
i++;
}
int num = atoi(temp.c_str());
max_num = max(max_num, num);
check[num]++;
}
}
map<int, int> m;
map<int, int>::iterator iter;
for(int i = 1 ; i<=max_num ; i++){
if(check[i]){
m.insert({-check[i], i});
}
}
for(iter = m.begin() ; iter != m.end() ; iter++)
{
answer.push_back((iter->second));
}
return answer;
}
Subscribe via RSS