본문 바로가기
Programming Solve/프로그래머스

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

by msm1029 2021. 8. 7.
반응형

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/81301?language=cpp 

 

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

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

programmers.co.kr

 

문제 풀이 : 단순 구현으로 영어의 앞글자로 if else를 통해 풀었다. 다른 사람의 풀이를 보니 정규표현식으로 푼 것이 가장 간단해보였다.

 

if-else 코드

#include <bits/stdc++.h>
using namespace std;

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

 

정규 표현식 코드

#include <bits/stdc++.h>
using namespace std;

int solution(string s) {
    s = regex_replace(s, regex("zero"), "0");
    s = regex_replace(s, regex("one"), "1");
    s = regex_replace(s, regex("two"), "2");
    s = regex_replace(s, regex("three"), "3");
    s = regex_replace(s, regex("four"), "4");
    s = regex_replace(s, regex("five"), "5");
    s = regex_replace(s, regex("six"), "6");
    s = regex_replace(s, regex("seven"), "7");
    s = regex_replace(s, regex("eight"), "8");
    s = regex_replace(s, regex("nine"), "9");    
    return stoi(s);
}
반응형