N

(프로그래머스 c++ KAKAO)숫자 문자열과 영단어 본문

프로그래머스 알고리즘/KAKAO

(프로그래머스 c++ KAKAO)숫자 문자열과 영단어

naeunchan 2021. 7. 9. 16:36
728x90
반응형

https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

주어진 문자열에서 숫자가 영단어로 이뤄진 경우 숫자로 바꿔 리턴하면 된다.

for문을 통해 s의 문자를 확인한다.

zero, one, eight, nine 처럼 영단어의 시작이 다른 숫자와 겹치지 않기 때문에 해당하는 숫자(문자열로 저장)를 answer에 저장한다.

그리고 단어의 길이 - 1을 i에 더해 다음 문자를 읽도록 한다.

 

만약 two, three, four, five와 같이 중복되는 경우 substr()함수를 이용해 한번 더 검사하여 해당하는 숫자를 저장한다.

마찬가지로 i에 단어의 길이 - 1을 더한다.

 

리턴값은 int형이기 때문에 stoi()로 string -> int로 변환하여 리턴한다.

#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    string answer = "";
    
    for(int i = 0; i < s.size(); i++){
        if(s[i] >= '0' && s[i] <= '9'){
            answer += s[i];
        }
        else{
            if(s[i] == 'z'){
                answer += '0';
                i += 3;
            }
            else if(s[i] == 'o'){
                answer += '1';
                i += 2;
            }
            else if(s[i] == 't'){
                if(s.substr(i, 3) == "two"){
                    answer += '2';
                    i += 2;
                }
                else{
                    answer += '3';
                    i += 4;
                }
            }
            else if(s[i] == 'f'){
                if(s.substr(i, 4) == "four"){
                    answer += '4';
                }
                else{
                    answer += '5';
                }
                i += 3;
            }
            else if(s[i] == 's'){
                if(s.substr(i, 3) == "six"){
                    answer += '6';
                    i += 2;
                }
                else{
                    answer += '7';
                    i += 4;
                }
            }
            else if(s[i] == 'e'){
                answer += '8';
                i += 4;
            }
            else if(s[i] == 'n'){
                answer += '9';
                i += 3;
            }
        }
    }
    
    return stoi(answer);
}
728x90
반응형