https://school.programmers.co.kr/learn/courses/30/lessons/81301
일부 숫자가 영단어로 바뀐 문자열을 원래 숫자로 변환하는 문제이다. 카카오는 문자열을 참 좋아하는 것 같다.
문제에서 추출할 수 있는 정보는 다음과 같다.
각 문자열이 특정 숫자에 일대일 대응하는 상황이다.
Key(문자열)-Value(숫자)의 구성을 가진 Map 자료구조를 떠올릴 수 있다.
먼저 Map에 각 Key에 알맞은 Value를 부여한다.
이후 map에 존재하는 Key임을 탐지하기 위한 파싱용 문자열 tmp를 선언하고, 숫자인지 아닌지를 판단하는 조건문을 추가하기만 하면 된다. (마지막이 Key인 경우에 대응해 for문 이탈 후 한번 더 체크해주었다.)반환값이 숫자이므로 stoi 함수로 마무리해주어야 한다.
#include <string>
#include <vector>
#include <map>
#include <algorithm>
// 19분 16초
using namespace std;
int solution(string s) {
int answer = 0;
string answerList = "";
map<string, char> m;
m["zero"] = '0';
m["one"] = '1';
m["two"] = '2';
m["three"] = '3';
m["four"] = '4';
m["five"] = '5';
m["six"] = '6';
m["seven"] = '7';
m["eight"] = '8';
m["nine"] = '9';
string tmp = "";
for(int i=0; i<s.size(); i++){
if(m.count(tmp) >= 1){ // 숫자랑 매칭되는 문자열 발견
answerList += m[tmp];
tmp = "";
}
if(s[i] >= '0' && s[i] <= '9') answerList += s[i];
else tmp += s[i];
}
if(m.count(tmp) >= 1){ // 마지막 부분이 문자열인 경우
answerList += m[tmp];
}
answer = stoi(answerList);
return answer;
}