Programmers_튜플

한상현·2021년 6월 14일
0

Algorithm

목록 보기
19/33

문제를 푸는데는 금방 풀었지만, 다른 사람의 풀이를 보고 필자 자신의 풀이에 현자타임이 왔다.
역시 잘하는 사람은 너무 많고 더 열심히 해야겠다는 생각이 든다.

  • 숫자가 중복되지 않는다는 조건에 쉽게 풀 수 있었다.
  • 필자는 map을 사용해줬지만, 숫자의 범위가 크지 않으므로 배열을 사용해도 괜찮을 것 같다.
  • 필자는 stringint로 바꿔서 더해줬지만, string으로 그대로 더해주고 나중에 한번에 바꿔주는 방식이 훨씬 좋을 것 같다.(다른 사람의 풀이)
  • 다른 사람의 풀이를 보며 많이 배웠다.
#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

int arr[100001];

vector<int> solution(string s) {
    vector<int> answer;
    unordered_map<int,int>m;
    int cnt = 0, num = -1;
    
    for(int i=0;i<s.size();i++)
    {
        if(s[i]=='{') cnt++;
        else if(s[i]=='}' && cnt==2) 
        {
            m[num]+=1;
            num=-1;
            cnt--;
        }
        else if(s[i]==',' && cnt==2)
        {
            m[num]+=1;
            num=-1;
        }
        else if('0'<=s[i]&& s[i]<='9')
        {
            if(num == -1) num=(s[i]-'0');
            else
            {
                num*=10;
                num += (s[i] - '0');
            }
        }
    }
    for(auto i:m)
    {
        arr[i.second] = i.first;
    }
    
    for(int i=m.size();i>=1;i--)
        answer.push_back(arr[i]);
        
    return answer;
}

string 방식을 사용하고 string 사이즈를 이용하여 숫자를 배열에 넣어준다면, 필자처럼 ,} 가 나올때마다 일일이 다뤄주지 않아도 된다. 😭duf

profile
의 공부 노트.

0개의 댓글