Programers : 튜플 (sstream 불가능)

김정욱·2021년 1월 29일
0

Algorithm - 문제

목록 보기
80/249
post-custom-banner

튜플

  • sstream을 통해 숫자만 꺼내오려고 했으나 실패함
    --> 테스트 해보니 문자열에 숫자 외에 다른 값들이 있으면 구분하지 못함
    ex1) str = "{{12,13}}" / str = "{{ 12 }}" / str = "12,13"(이거는 12만 가져옴)
    결국 sstream을 사용할 때에는 숫자만 있으며, 공백으로 구분될 때 사용해야 할 듯!
/* 실패 코드 ㅠㅠ */
    while(true)
    {
        ss >> num;
        if(ss.eof()) break;
        m[num]++;
    }

코드

#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

vector<int> solution(string s) {
    vector<int> answer;
    map<int,int> m;    
    stringstream ss(s);
    int num;
    string str="";
    for(int i=0;i<s.length();i++)
    {
        /* 숫자이지만, 한자리 수가 아닌 경우 */
        if((s[i] >= '0' && s[i] <= '9') && (s[i+1] >= '0' && s[i+1] <= '9')){
            str+=s[i];
        }else if(s[i] >= '0' && s[i] <= '9'){
        /* 한자리수 or 여러자리의 수의 마지막일 경우 */
          str+=s[i];
          m[stoi(str)]++;  
          str="";
        } 
    }
    /* map에서 특정 value에 따라 정렬하려면 vector에 복사한 다음 써야함 */
    vector<pair<int,int>> tmp(m.begin(), m.end());
    sort(tmp.begin(), tmp.end(), compare);
    /* 정렬된 map의 key값을 answer에 삽입 */
    for(auto a : tmp) answer.push_back(a.first);
    return answer;
}
  • map에서 특정 value에 따라 sort하려면 vector에 옮긴 뒤 시행해야 한다!
profile
Developer & PhotoGrapher
post-custom-banner

0개의 댓글