관리 메뉴

sleepyotter

Roman To Integer 본문

프로그래밍/알고리즘+코딩테스트

Roman To Integer

sleepyotter. 2021. 8. 22. 23:03

못풀고 낑낑대다가 해답에 손을 대고 말았다.

핵심은 '연속된 두 수를 비교했을 때, 작은 숫자가 앞에 온다면' 이다.

이런 경우에만 뒤쪽 수 - 앞쪽 수 한다. (IV = 5-1) 와 같이...

당연히 숫자 2개를 비교하니 루프는 사이즈-1 까지만 돌리고 마지막 숫자는 얄짤없이 더하는 숫자이니 그냥 더하면 된다.

class Solution {
public:
    int romanToInt(string s)
    {
        int sz = s.size();
        //만약 길이가 1일 경우에는 맞는 숫자 찾아서 반환하면 된다.
        if (s.size() == 1) return hmap[s[0]];

        int sum = 0;
        for (int i = 0; i < sz - 1; ++i)
        {
            int curNum = hmap[s[i]];
            if (hmap[s[i]] < hmap[s[i + 1]])
                curNum *= -1;
            sum += curNum;
        }
        sum += hmap[s[sz - 1]];
        return sum;

    }
private:
    unordered_map<char, int> hmap =
    {
        {'M', 1000},
        {'D', 500},
        {'C', 100},
        {'L', 50},
        {'X', 10},
        {'V', 5},
        {'I', 1},
    };
};

'프로그래밍 > 알고리즘+코딩테스트' 카테고리의 다른 글

Valid Parentheses  (0) 2021.08.24
Longest Common Prefix  (0) 2021.08.22
Palindrome Number  (0) 2021.08.22
Reverse Integer  (0) 2021.08.22
Two Sum  (0) 2021.08.18