bdfgdfg

[레벨1] 숫자 문자열과 영단어 본문

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

[레벨1] 숫자 문자열과 영단어

marmelo12 2021. 8. 8. 21:28
반응형

 

#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    int answer = 0;
    string sAnswer;
    int i,j;
    for(i = 0; i < s.size(); ++i)
    {
        char c = s[i];
        if (97 <= s[i] && s[i] <= 122)
        {
            string k;
            k.reserve(5);
            while (97 <= s[i] && s[i] <= 122 && i < s.size())
            {
                k += s[i];
                if (k == "zero") { c = '0'; break; }
                else if (k == "one") { c = '1';break; }
                else if (k == "two") { c = '2';break; }
                else if (k == "three") { c = '3'; break; }
                else if (k == "four") { c = '4'; break; }
                else if (k == "five") { c = '5'; break; }
                else if (k == "six") { c = '6'; break; }
                else if (k == "seven") { c = '7'; break; }
                else if (k == "eight") { c = '8'; break; }
                else if (k == "nine"){ c = '9'; break; }
                else ++i;
            }
        }
        sAnswer += c;
    }
    answer = stoi(sAnswer);
    
    return answer;
}

 

나의 풀이방법은 간단하고 무식한 방법을 사용.

문자열을 하나씩 읽어들이고 문자가 숫자가 아닌 다른 값이라면 string k변수를 이용해 숫자를 만나거나 문자열의 길이를 넘어서기전까지 숫자외 문자를 읽어들인다.

 

그리고 거기에 맞는 문자열에 따라 숫자를 sAnswer 변수에 넣어준다.

 

다른사람의 풀이를 보았을때. 숫자 문자외의 문자는 맨앞의 문자만 읽어들이고, 예로들어 zero라면 if(s[i] == 'z')체크 후 answer += '0'을 해준다. 맨앞의 문자가 겹치는 four,five와 같은 경우는 string의 메소드 substr을 이용하여 누구인지 체크하고 넣어준다.

 

그외 간단히 map을 이용하여 string을 key값. int형으로 value를 주고 

map["zero"] = 0. 식으로 저장. 

그렇게해서 반복문을 돌리면서 문자를 하나씩 뽑아오는데 해당 문자가 숫자라면 바로 저장, 그외는 하나씩 더해가보면서 map에 등록된 key와 비교. -> end()를 가리키지 않는다면 저장된 키값. 

반응형

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[레벨1] 문자열 다루기 기본  (0) 2021.08.14
[레벨1] 행렬의 덧셈  (0) 2021.08.13
[레벨1] 모의고사  (0) 2021.08.12
[레벨1] 체육복  (0) 2021.08.10
[레벨1] 완주하지 못한 선수  (0) 2021.08.09
Comments