#include <iostream>
#include <cstdlib>
#include <string>
#include <unordered_map>


class Solution {
public:
    int romanToInt(std::string s) {
        std::unordered_map<char, int> roman_vals =
        {
            {'I',1},
            {'V',5},
            {'X',10},
            {'L',50},
            {'C',100},
            {'D',500},
            {'M',1000}
        };

        size_t s_len = s.size(),
               res = roman_vals[s[s_len-1]];

        for(int i = (s_len-2); 0<=i; --i)
        {
            char current = s[i],
                 prev = s[i+1];
            if(current == 'I' && (prev == 'V' || prev == 'X')) {
                res -= roman_vals['I'];
            } else if(current == 'X' && (prev == 'L' || prev == 'C')) {
                res -= roman_vals['X'];
            } else if(current == 'C' && (prev == 'D' || prev == 'M')) {
                res -= roman_vals['C'];
            } else {
                res += roman_vals[current];
            }
        }
        return res;
    }
};


int main() {
    std::string s = "III";
    auto res = Solution().romanToInt(s);
    
    std::cout << res << std::endl;
    
    return EXIT_SUCCESS;
}