Python 문제풀이/LeetCode

13. Roman to Integer

hjc_ 2022. 8. 16. 04:16

link

 

"""
- 반복분을 끝까지 돌리기 위해서 s 에 더미 데이터를 넣어주었다. ';' : 0
- CM 은 900 이므로 그냥 900 더하고 1000 빼는 식으로 값을 조정했다.
"""

class Solution:
    def romanToInt(self, s: str) -> int:
        dict = {
            'I':1,
            'V':5,
            'X':10,
            'L':50,
            'C':100,
            'D':500,
            'M':1000,
            ';':0
        }
        s += ';'
        number = 0 
        
        for i in range(len(s)-1) :
            if dict[s[i+1]] > dict[s[i]]:
                number += dict[s[i+1]] - dict[s[i]]
                number -= dict[s[i+1]]
            else : 
                number +=  dict[s[i]]
        
        return number
        
## ----------------------------------------------------------------------
## 더 간편한 풀이
"""
- 그럴 필요 없이, CM 은 900 이므로 그냥 -100, +1000 하면 된다. ㅋㅋ
"""

class Solution:
    def romanToInt(self, s: str) -> int:
        dict = {
            'I':1,
            'V':5,
            'X':10,
            'L':50,
            'C':100,
            'D':500,
            'M':1000,
        }
        
        number = 0
        for i in range(len(s)):
            if i + 1 < len(s) and dict[s[i]] < dict[s[i+1]] :
                number -= dict[s[i]]             
            else :
                number += dict[s[i]]
                
        return  number