네오가 숫자의 일부를 영단어로 바꾸어 전달한 문자열을, 프로도가 원래 숫자로 복원하는 문제를 해결함. 문자열 속의 영단어를 모두 해당 숫자로 바꾸는 로직이 핵심임.
사용한 주요 함수 및 자료구조
#include <string>
– 문자열 조작을 위한 기본 라이브러리#include <unordered_map>
– 숫자 영단어와 숫자 문자 간의 매핑을 위한 해시맵std::string::find()
– 문자열 내에서 부분 문자열 검색std::string::replace()
– 문자열 일부를 다른 문자열로 교체std::stoi()
– 문자열을 정수로 변환
최종 코드
#include <string>
#include <unordered_map>
using namespace std;
int solution(string s)
{
int answer = 0;
unordered_map<string, string> numMap = {
{"zero", "0"}, {"one", "1"}, {"two", "2"},
{"three", "3"}, {"four", "4"}, {"five", "5"},
{"six", "6"}, {"seven", "7"}, {"eight", "8"}, {"nine", "9"}
};
for (auto num : numMap)
{
size_t pos = s.find(num.first);
while (pos != string::npos)
{
s.replace(pos, num.first.length(), num.second);
pos = s.find(num.first);
}
}
answer = stoi(s);
return answer;
}
- 각 숫자 영단어를 해시맵으로 매핑하고, 문자열에서 해당 단어가 있는지 반복 탐색하면서 모두 숫자로 바꿔줌.
- 최종적으로 변환된 문자열을 정수로 바꾸어 리턴함.
배운 점
std::string::find()
는 첫 번째 등장 위치만 찾기 때문에 루프를 통해 반복 처리해야 함std::string::replace()
는 정확한 위치와 길이를 전달해야 정상 작동함- 문자열 조작 시 여러 개 등장하는 경우 반복적으로 찾아야 함