GitHubSeob

C++ / 프로그래머스 / 숫자 문자열과 영단어 본문

Programmers/Level 1

C++ / 프로그래머스 / 숫자 문자열과 영단어

GitHubSeob 2021. 8. 15.

문제

https://programmers.co.kr/learn/courses/30/lessons/81301

 

코딩테스트 연습 - 숫자 문자열과 영단어

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

programmers.co.kr

문제풀이

s[0]부터 s의 크기만큼 반복하면서

z로 시작하면 num에 0을 push 한다.

zero는 4글자이고 if문이 종료되면 for문의 조건으로 인해 i가 +1 되므로 if문에서 i+=3을 해서 zero 다음 문자열부터 for문을 돌게 한다.

마찬가지로 다른 문자들도 이런 식으로 if문으로 조건을 걸어준다.

마지막으로 숫자가 들어온다면 그냥 숫자만 push 해준다.

 

 

 

코드

#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    string num = "";
    for (int i = 0; i < s.size(); ++i) {
        if (s[i] == 'z') {
            num.push_back('0');
            i += 3;
        }
        else if (s[i] == 'o') {
            num.push_back('1');
            i += 2;
        }
        else if (s[i] == 't') {
            if (s[i + 1] == 'w') {
                num.push_back('2');
                i += 2;
            }
            else {
                num.push_back('3');
                i += 4;
            }
        }
        else if (s[i] == 'f') {
            if (s[i + 1] == 'o') {
                num.push_back('4');
                i += 3;
            }
            else {
                num.push_back('5');
                i += 3;
            }
        }
        else if (s[i] == 's') {
            if (s[i + 1] == 'i') {
                num.push_back('6');
                i += 2;
            }
            else {
                num.push_back('7');
                i += 4;
            }
        }
        else if (s[i] == 'e') {
            num.push_back('8');
            i += 4;
        }
        else if (s[i] == 'n') {
            num.push_back('9');
            i += 3;
        }
        else num.push_back(s[i]);
    }
    return stoi(num);
}