본문 바로가기
알고리즘/프로그래머스

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

by 오오오니 2023. 11. 23.

문제

숫자의 일부가 문자열로 표현된 s가 주어진다. 원래숫자를 찾아서 반환하는 문제이다.

풀이

1.0부터 9까지 문자열 배열을 선언한다.

2. zero부터 nine 까지 s에 포함이 되어있는지 검사한후 있으면 문자열을 숫자문자열(ex ) "9")로 바꾸어준다.

3. 여러번 포함 되어 있을 수도 있으니까 없을 때까지 검사한다.

4. 문자열을 숫자로 바꾸어 반환한다.

#include <string>
#include <vector>


using namespace std;



int solution(string s) {
    int answer = 0;
    
    string num_str[]={"zero", "one", "two", "three","four","five","six","seven","eight","nine"};
    for(int i=0;i<10;i++){
        
        while(s.find(num_str[i])!=string::npos){
            s.replace(s.find(num_str[i]),num_str[i].length(),to_string(i));
        }
    }
    answer= stoi(s);
    
    return answer;
}

 

다른 사람의 풀이

1.

 s = regex_replace(s, regex("zero"), "0");
  •  regex_replace를 써서 한번에 바꾸어주었다.

2.

if(!num_str[j].compare(0, num_str[j].length(), s, i, num_str[j].length())) {
                    answer = answer * 10 + j;
                }

문자열 전체를 비교하는 compare는 알아도 인자가 4개 들어가는 compare는 처음봐서 신기했다.

찾아보니까

str.compare(a,b,str2,c,d);

뜻은 str의 a번째 인덱스부터 b개까지 부분 분자열을  str2의 c번째 인덱스부터 d개까지 비교한다는 뜻이다.
두 문자열이 같으면 0을 반환한다.

https://cplusplus.com/reference/string/string/compare/

 

https://cplusplus.com/reference/string/string/compare/

substrings (2)int compare (size_t pos, size_t len, const string& str) const;int compare (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen = npos) const;

cplusplus.com