이 문제를 풀면서 for문의 i 값을 수동으로 조절할 수 있다는 점을 알게 되었다!
코드는 다음과 같다.
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
long long solution(string numbers) {
long long answer = 0;
string tmp = "";
map<string, int> mp = {
{"zero", 0}, {"one", 1}, {"two", 2}, {"three", 3}, {"four", 4},
{"five", 5}, {"six", 6}, {"seven", 7}, {"eight", 8}, {"nine", 9}
};
for(int i=0; i<numbers.size(); i++) {
for(auto a : mp) {
if (numbers.substr(i, a.first.size()) == a.first) {
tmp += to_string(a.second);
i += a.first.size() - 1;
break;
}
}
}
answer = stol(tmp);
return answer;
}
for 문에서는 자동으로 i값이 1씩 증가하도록 설정해놨었다.
for(int i=0; i<numbers.size(); i++) {
for(auto a : mp) {
if (numbers.substr(i, a.first.size()) == a.first) {
tmp += to_string(a.second);
i += a.first.size() - 1;
break;
}
}
}
만약 문자열을 찾으면 해당 문자열에 맞는 숫자를 tmp에 더하고
그 문자열 길이 다음만큼의 문자열을 다시 조사해야했다.
하지만 수동으로 i를 조절해도 괜찮을지 확신이 안섰다.
하지만 실행해보니 잘 돌아갔다.
결과적으로, i++는 자동으로 증가하지만, i += a.first.size() - 1;을 통해 i의 증가량을 수동으로 조정하여 더 빠르게 문자열을 처리할 수 있었다.