Programers : [3차] 압축 - C++ / char->string

김정욱·2021년 3월 8일
0

Algorithm - 문제

목록 보기
146/249

[3차] 압축

코드

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

vector<int> solution(string msg) {
    vector<int> ans;
    map<string,int> dic;
    /* char -> string */
    for(int i=0;i<26;i++) 
        m[string(1,'A'+i)] = i+1;
    string w, c;
    int seq=27;
    int cnt=1;
    int i=0;
    for(;i<msg.length();i++)
    {
        w = msg.substr(i,cnt);
        if(i+cnt >= msg.length()) break;
        c = msg.substr((i+cnt),1);
        if(dic[w+c]){
            cnt++;
            i--;
        }
        else{
            ans.push_back(dic[w]);
            dic[w+c] = seq++;
            i += cnt-1;
            cnt = 1;
        }
    }
    ans.push_back(dic[msg.substr(i,cnt)]);
    return ans;
}
  • key point!
    : map<string,int>string.substr()을 사용
  • 로직
    1) map 자료형인 dic에 알파벳 A~Z까지 등록
    2) wcstring.substr()로 구하고 사전에 있으면 cnt증가해서 길이를 늘림
    3) 사전에 없으면 wans에 삽입 / w+cdic에 추가
  • 깨달은 것
    : char -> string하는 간단한 방법
    map<string, int> m;

    /* char -> string */
    m[string(1,'C')] = 3;
    cout << m["C"]<<'\n'; // 3출력

    /* char[] -> string */
    char ch[3] = {'A', 'B', 'C'};
    string str(ch);
    m[str] = 5;
    cout << m["ABC"]<<'\n'; // 5출력
profile
Developer & PhotoGrapher

0개의 댓글