Deff_Dev

[프로그래머스] 숫자 문자열과 영단어 (C++) 본문

코딩테스트/프로그래머스

[프로그래머스] 숫자 문자열과 영단어 (C++)

Deff_a 2024. 11. 6. 16:22

문제

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

이 문제는 입력된 문자열을 숫자로 변환하여 반환하는 문제이다.

 

char 아스키 코드 비교(48 ~ 57)를 이용해 숫자를 판별하고, 각각의 숫자 영단어에 따른 숫자 문자 반환 함수를 만들어 풀이했다.

 

문제를 다 푼뒤, 숫자 문자 판별할 때, isdigit를 사용하면 쉽게 판단할 수 있다는 걸 알게되었다.

#include <string>
#include <vector>

using namespace std;

char GetNum(string s){
    char c;
    
    if(s == "zero"){
        c = '0';
    }
    else if(s == "one"){
        c = '1';
    }
    else if(s == "two"){
        c = '2';
    }
    else if(s == "three"){
        c = '3';
    }
    else if(s == "four"){
        c = '4';
    }
    else if(s == "five"){
        c = '5';
    }
    else if(s == "six"){
        c = '6';
    }
    else if(s == "seven"){
        c = '7';
    }
    else if(s == "eight"){
        c = '8';
    }
    else if(s == "nine"){
        c = '9';
    }
   return c;
}

bool IsParsing(string s){
    bool b = false ;

    if(s == "zero"){
        b = true;
    }
    else if(s == "one"){
          b = true;
    }
    else if(s == "two"){
         b = true;
    }
    else if(s == "three"){
              b = true;
    }
    else if(s == "four"){
            b = true;
    }
    else if(s == "five"){
       b = true;
    }
    else if(s == "six"){
            b = true;
    }
    else if(s == "seven"){
        b = true;
    }
    else if(s == "eight"){
          b = true;
    }
    else if(s == "nine"){
      b = true;
    }
    
   return b;
}

int solution(string s) {
    int answer = 0;
    string str = "", sub ="";
    
    for(int i =0; i < s.length(); i++){
        char c = s[i];
        sub += c;
        
        if(c >= 48 && c <=57){
            str += c;
            sub = "";
        }
        else if(IsParsing(sub)){
            str += GetNum(sub);
            sub ="";
        }
        
    }
    
    answer = stoi(str);
    return answer;
}