문제설명

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