본문 바로가기
알고리즘 공부/프로그래머스 [C++]

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

by 이포터 2022. 11. 4.

문제 링크

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

 

문제 설명

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.
1. 1478 → "one4seveneight"
2. 234567 → "23four5six7"
3. 10203 → "1zerotwozero3"

문제 입출력 예)

s result
"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

 

문제 풀이 1/2

너무 비효율 적인 방법으로 문제를 풀었다,,

s의 글자수 길이 만큼 for문을 돌리고,

str이라는 문자열을 주고 이와 해당되는 공간을 찾아 변경을 실시하였다.

for문에 for문을 돌리기에 N^2 너무 안좋은 방법이다..

#include <string>
#include <vector>
#include <iostream>
using namespace std;

int solution(string s) {
    vector<string> str = {"zero","one","two","three","four","five","six","seven","eight","nine"};
    int answer = 0;
    for(auto ss:s){
        for(int i=0; i<str.size(); i++){
            size_t index =  s.find(str[i]);
            if(index <= 50){
                s.replace(index, str[i].size(), to_string(i));
                break;
            }
        }    
    }
    
    answer = stoi(s);
    return answer;
}

 

문제 풀이 2/2

다른 문제풀이를 찾아본 결과

regex라는 라이브러리가 있다는 것을 알게 되었다.

regex_replace(문자열, regex("바꿀문자"), 바뀔문자);

#include<regex>
#include<iostream>
#include<string>
using namespace std;

int main(){
	string s = "hello my name is efforter";
    s = regex_replace(s, regex("efforter"), "hello");
	
    // 이전 : hello my name is efforter
    // 이후 : hello my name is hello
	
    return 0;
}

위와같이 regex를 사용할 수 있다.

이에 관련해 문제 풀이 방법은 아래와같이 사용된다.

#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);
}

 

리뷰

regex_replace 메모,,

댓글