unordered_map< , >

Subin·2024년 9월 17일

Algorithm

목록 보기
37/69

문자와 숫자가 섞인 문자열을 다 숫자로 바꿔서 반환하는 문제를 풀었다.
문자를 하나씩 저장해서 비교하는 방식은 같았지만, 하나씩 one, two, ... 를 비교하는 게 너무 비효율적이라고 생각했는데,
unordered_map을 활용해서 string과 char형을 짝지어서 저장해둘 수 있었다.

#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

int solution(string s) {
    int answer = 0;
    string str;
    string ans;
    // 하나씩 검사하면서 숫자가 나올 때까지 
    // 그 전까지는 string에 저장해두고 이를 영단어와 비교하여 숫자로 변환
    // 이후 답 string에 저장 후, int로 변경
    unordered_map<string, char> WordToDigit = {
        {"zero", '0'}, {"one", '1'}, {"two", '2'}, {"three", '3'}, {"four", '4'}, 
        {"five", '5'}, {"six", '6'}, {"seven", '7'}, {"eight", '8'}, {"nine", '9'}    
    };
    
    for(char c: s)
    {
        if(isdigit(c)) // 숫자라면
            ans += c;
        else // 문자라면
        {
            str += c;
            if(WordToDigit.find(str) != WordToDigit.end()) // 문자가 완성될 때까지 str에 저장
            {
                ans += WordToDigit[str]; // 문자에 해당하는 숫자 저장
                str = ""; // 초기화
            }   
        }
    }
    answer = stoi(ans);
    return answer;
}


#include <unordered_map> 꼭 추가해서 쓰기!!

profile
성장하며 꿈꾸는 삶을 살아가고 있는 대학생입니다😊

0개의 댓글