알고리즘/프로그래머스

2021 카카오 채용연계형 인턴십 (숫자 문자열 영단어)

칼퇴시켜주세요 2022. 11. 22. 18:37
728x90

입력으로 영어와 숫자가 포함된 문자열이 들어오면 문자열을 원래 숫자로 치환하는 문제이다.

개발은 Java로 하는데 알고리즘은 C++로 푸는 것이 편해서 오랜만에 풀다보니 문법을 다 까먹었다.

 

처음에는 s.length() 만큼 반복하면서 알파벳을 누적하고 누적과 동시에 해당 문자열이 숫자로 치환 가능한지 체크하는 함수를 만들어 풀려고 시도 했다. 그냥 삽질했음....

 

std::string 의 메소드를 잘 알지 못해서 이런 이상한 짓을 하였다. 

 

사실 Python에는 replace함수를 매우 간단히 쓸수 있어 C++은 외우지 않았다.... (std::string에 replace가 있다니... 심지어 to_string 도 내장... WOW)

 

풀이는 다음과 같다.

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

string num[10] = { "zero","one","two" ,"three" ,"four" ,"five" ,"six" ,"seven" ,"eight" ,"nine" };

int solution(string s) {
    
    for(size_t j = 0; j < 10; j++)
	{
		if(s.find(num[j]) != string::npos)
		{
        	//replace(시작index, 구간, 치환문자)
			s.replace(s.find(num[j]), num[j].length(), to_string(j));
            j--;
		}

	}
    
	return stoi(s);
}

 

 

반응형