01
21

문제

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

1478 -> "one4seveneight"
234567 -> "23four5six7"
10203 -> "1zerotwozero3"

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 <= s의 길이 <= 50
  • s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2, 000, 000, 000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

코드

더보기
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(string s) {
    string answer = "", temp = "";
    vector<string> num = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
    
    
    for (int i = 0; i < s.size(); ++i)
    {
        if ('0' <= s[i] && s[i] <= '9')
        {
            answer += s[i];
        }
        else temp += s[i];
        
        if (find(num.begin(), num.end(), temp) != num.end())
        {
            answer += to_string(find(num.begin(), num.end(), temp) - num.begin());
            temp = "";
        }
    }
    
    return stoi(answer);
}

 

코드 풀이

먼저 int answer을 string으로 변경해준다. temp는 임시로 저장할 값의 데이터이다.

vector로 num의 숫자들을 영어로 바꾼 것들을 저장해준다.

 

for문으로 문자열 s의 크기 만큼 돌아간다. 그 안에서 if문으로 문자열이 '0'이상 이면서 '9' 이하인 경우, answer에 값을 넣어준다.

아닌 경우에는 temp에 넣어준다.

 

if 문으로 find를 사용해서 num의 안에서 temp의 단어를 찾게 되면 그것을 answer의 값에 넣어준다.

 

마지막에 stoi로 int 값으로 변환해준다.

 

COMMENT