Programmers Review

[Lv 1] 숫자 문자열과 영단어

hanseongbugi 2024. 6. 7. 17:14

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이 문제는 map 자료구조를 통해 손쉽게 해결할 수 있다.

map에 영단어일 경우 일치하는 숫자를 value로 하여 저장한다.

 

이후 s문자열을 순회한다.

이때 현재 문자가 '0'에서 '9'에 해당하는 경우 그대로 문자열 number에 삽입한다.

아닌 경우 임시 문자열인 str에 문자를 삽입하고 map에서 현재 str에 해당하는 영단어가 있을 때 number 문자열에 value를 삽입한다.

 

순회가 끝나면 number 문자열에 있는 값을 정수로 변환하고 반환한다.

 

#include <string>
#include <vector>
#include <map>
using namespace std;
map<string,string> m = {{"zero","0"},{"one","1"},{"two","2"},{"three","3"},{"four","4"},{"five","5"},{"six","6"},{"seven","7"},{"eight","8"},{"nine","9"}};

int solution(string s) {
    int answer = 0;
    
    string number = "";
    string str = "";
    for(int i = 0;i<s.length();i++){
        char c = s[i];
        if(c >= '0' && c <='9'){
            number += c;
            str = "";
        }
        else{
            str += c;
            if(m.find(str) != m.end()){
                number += m[str];
                str = "";
            }
        }
    }
    answer = stoi(number);
    return answer;
}