#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(string msg) {
vector<int> ans;
map<string,int> dic;
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) w
와 c
를 string.substr()
로 구하고 사전에 있으면 cnt
증가해서 길이를 늘림
3) 사전에 없으면 w
를 ans
에 삽입 / w+c
를 dic
에 추가
- 깨달은 것
: char -> string
하는 간단한 방법
map<string, int> m;
m[string(1,'C')] = 3;
cout << m["C"]<<'\n';
char ch[3] = {'A', 'B', 'C'};
string str(ch);
m[str] = 5;
cout << m["ABC"]<<'\n';