네오가 숫자의 일부를 영단어로 바꾸어 전달한 문자열을, 프로도가 원래 숫자로 복원하는 문제를 해결함. 문자열 속의 영단어를 모두 해당 숫자로 바꾸는 로직이 핵심임.

사용한 주요 함수 및 자료구조

  • #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()는 정확한 위치와 길이를 전달해야 정상 작동함
  • 문자열 조작 시 여러 개 등장하는 경우 반복적으로 찾아야 함