간단한 구현 문제이다.

 좀 간단한 코드로 풀어보고 싶었는데 언어의 한계와 두뇌의 한계로 조건문 떡칠해서 해결했다.

 핵심은 영단어 앞에 한 개 혹은 두 개 알파벳만 확인하면 어떤 숫자로 치환해야할지 알 수 있다는 것이다.

 어떤 숫자로 치환해야 할 지 알았다면, (알파벳 수 - 1)만큼 jump해준다.

 

#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    int answer = 0;
    for (int i = 0; i < s.size(); ++i) {
        int next = 0;
        if (s[i] >= '0' && s[i] <= '9') next = (s[i] - '0');
        else {
            if (s[i] == 'z') next = 0, i += 3;
            else if (s[i] == 'o') next = 1, i += 2;
            else if (s[i] == 't') {
                if (s[i + 1] == 'w') next = 2, i += 2;
                else next = 3, i += 4;
            }
            else if (s[i] == 'f') {
                if (s[i + 1] == 'o') next = 4, i += 3;
                else next = 5, i += 3;
            }
            else if (s[i] == 's') {
                if (s[i + 1] == 'i') next = 6, i += 2;
                else next = 7, i += 4;
            }
            else if (s[i] == 'e') next = 8, i += 4;
            else if (s[i] == 'n') next = 9, i += 3;
        }
        answer = answer * 10 + next;
    }
    return answer;
}

+ Recent posts