본문 바로가기
Problem solving/LeetCode

[LeetCode] 13. Roman to Integer (C++)

by 겸 2023. 6. 27.

문제

로마 숫자는 I, V, X, L, C, D, M으로 나타낸다. 이를 정수로 바꾼 값은?

보통의 경우에는 왼쪽으로 갈 수록 큰 숫자에서 작은 숫자로 향하는데,

반대의 경우 다른 숫자를 나타낸다. 그 예로 숫자 4는 IIII가 아니라 IV로 나타낸다.

생각할 것

숫자와 우선순위를 어떻게 간단히 나타낼까? map을 사용하자!

그 중에서도 키값의 순서가 필요 없으므로 unordered_map을 사용하기

코드

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

        int res = 0;
        for(int i=0; i<s.size()-1; i++){
            if(m[s[i]] < m[s[i+1]]){ // 다음에 오는게 더 크면 다음에 올 값에서 해당 문자를 뺀 값이 된다
                res -= m[s[i]];
            }
            else {
                res += m[s[i]];
            }
        }

        res += m[s[s.size()-1]];

        return res;
    }
};
반응형