#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(string msg) {
vector<int> answer;
map<string, int> m;
int idx = 1;
for (char i = 'A'; i <= 'Z'; i++)
m[string(1, i)] = idx++;
string temp = "";
for (int i = 0; i < msg.size(); i++) {
temp += msg[i];
if (!m[temp]) {
answer.push_back(m[temp.substr(0, temp.size() - 1)]);
m[temp] = idx++;
temp = "";
i--;
}
}
answer.push_back(m[temp]);
return answer;
}
간단히 map에 기본적인 한자리 알파벳을 정의하고, 한개씩 읽어들이면서 temp에 넣어준다.
매 횟수마다 map을 체크하여 value값이 있다면 넘어간다.
그러나 value가 없는 문자열 key temp일 때, 그 값은 만들어서 넣어주어야 하는 문자열이기 때문에 answer에 현재 문자열 인덱스의 value값을 넣어주고, map에 새로 temp라는 key를 할당해준다.
그리고 한 칸 뒤로 이동해서 반복적으로 수행한다. 한 칸 미리 이동해서 계산을 했다고 생각하면 편하다.
개뻘짓을 자꾸 한다. 문제 이해를 제대로 빠르게 하기 위해 노력을 해야겠다.