알고리즘 문제/Easy

로마 숫자를 정수로 변환하기 - 13. Roman to Integer

네야_IT 2024. 8. 23. 03:01
반응형

13. 로마 숫자를 정수로 변환하기

로마 숫자는 다음과 같은 7개의 다른 기호로 표현됩니다: I, V, X, L, C, D, M.

기호값

I 1
V 5
X 10
L 50
C 100
D 500
M 1000

 

예를 들어, 숫자 2는 로마 숫자로 II로 쓰이며, 이는 1이 두 번 더해진 것입니다. 숫자 12는 XII로 쓰이며, 이는 단순히 X + II입니다. 숫자 27은 XXVII로 쓰이며, 이는 XX + V + II입니다.

로마 숫자는 보통 가장 큰 값부터 작은 값 순서로 왼쪽에서 오른쪽으로 씁니다. 그러나 숫자 4는 IIII가 아닌 IV로 씁니다. 이는 1이 5 앞에 오기 때문에 5에서 1을 빼서 4가 됩니다. 같은 원칙이 숫자 9에도 적용되며, 이는 IX로 씁니다. 다음 6가지 경우에서 감산이 사용됩니다:

  • I는 V(5)와 X(10) 앞에 올 수 있어 4와 9를 만듭니다.
  • X는 L(50)과 C(100) 앞에 올 수 있어 40과 90을 만듭니다.
  • C는 D(500)와 M(1000) 앞에 올 수 있어 400과 900을 만듭니다.

주어진 로마 숫자를 정수로 변환하세요.

예시

예시 1:

  • 입력: s = "III"
  • 출력: 3
  • 설명: III = 3.

예시 2:

  • 입력: s = "LVIII"
  • 출력: 58
  • 설명: L = 50, V = 5, III = 3.

예시 3:

  • 입력: s = "MCMXCIV"
  • 출력: 1994
  • 설명: M = 1000, CM = 900, XC = 90, IV = 4.

제한 사항

  • 1 <= s.length <= 15
  • s는 'I', 'V', 'X', 'L', 'C', 'D', 'M' 문자만 포함합니다.
  • s는 [1, 3999] 범위 내의 유효한 로마 숫자임이 보장됩니다.

 

 

풀이

class Solution:
    def romanToInt(self, s: str) -> int:
        result = 0
        roman = {
            "I": 1,
            "V": 5,
            "X": 10,
            "L": 50,
            "C": 100,
            "D": 500,
            "M": 1000,
        }

        prev = 0
        for i in range(len(s)-1, -1, -1):
            n = roman[s[i]]

            if prev > n:
                result -= n
            else:
                result += n
            prev = n

        return result
반응형