Chloe Jungah Kim
Chloe Jungah Kim
A blogger who writes about everything.

[Leetcode] 13. Roman to Integer

https://leetcode.com/problems/roman-to-integer/
[Leetcode] 13. Roman to Integer

로마 숫자가 주어졌을 때, 정수로 변환하는 문제

  • 각 문자(symbol)별 해당하는 값은 아래와 같다.
    • I : 1 / V : 5 / X : 10 / L : 50 / C : 100 / D : 500 / M : 1000
  • 왼쪽에서 오른쪽으로 읽으며, 큰 숫자에서 작은 숫자의 순서로 작성된다.
  • 작은 값에 해당하는 문자가 큰 값에 해당하는 문자의 왼쪽에 위치할 경우, 그 값만큼을 뺀다. (e.g., IV : 4)

Example 1

  • Input : s = “III”
  • Output : 3

Example 2

  • Input : s = “LVIII”
  • Output : 58

Example 3

  • Input : s = “MCMXCIV”
  • Output : 1994

Note

  • dict 사용 (key : 로마 숫자(문자) / value : 문자에 해당하는 값)
  • 이전에 나타난 문자가 현재 문자보다 작은 값일 경우 : 현재 문자의 값 - 이전 문자의 값
  • 동일한 문자가 반복되는 경우 : 해당 문자보다 크거나 작은 값을 지닌 문자가 나올 때까지 더한다.
  • 이전에 나타난 문자가 현재 문자보다 큰 값일 경우 : 이전까지의 값을 전부 더한다. (큰 숫자에서 작은 숫자로 작성되므로)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution:
    def romanToInt(self, s: str) -> int:
        dict = {'I' : 1, 'V' : 5, 'X' : 10, 'L' : 50, 'C' : 100, 'D' : 500, 'M' : 1000}
        
        res = 0
        temp = 0
        before = 1000
        for i, ch in enumerate(s) :
            if before < dict[ch] :
                temp = dict[ch] - temp
                res += temp
                temp = 0
            elif before == dict[ch] :
                temp += dict[ch]
            else :
                res += temp
                temp = dict[ch]
            before = dict[ch]
        res += temp
        return res