Algorithm (PS)

[LeetCode] 13. Roman to Integer - Python

minjiwoo 2023. 11. 12. 19:35
728x90

Question: 

https://leetcode.com/problems/roman-to-integer/

 

Roman to Integer - LeetCode

Can you solve this real interview question? Roman to Integer - Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example, 2 is written as II in Roman numeral, just tw

leetcode.com

 

이게 좋은 풀이인지는 모르겠는데;; 일단 쌩 구현으로 제출해서 accepted 된 코드 :

Answer: 

class Solution:
    def romanToInt(self, s: str) -> int:
        symbols = {"I": 1, "V": 5, "X": 10, "L":50, "C": 100, "D": 500, "M": 1000}
        N = len(s)
        stack = []
        answer = 0 
        i = 0
        while i < N: 
            if s[i] == 'I':
                if i+1 < N and s[i+1] == 'V': 
                    answer += 4 
                    i += 2 
                elif i+1 < N and s[i+1] == 'X': 
                    answer += 9 
                    i += 2
                else: 
                    answer += 1
                    i += 1
            elif s[i] == 'X': 
                if i+1 < N and s[i+1] == 'L':
                    answer += 40 
                    i += 2
                elif i+1 < N and s[i+1] == 'C':
                    answer += 90 
                    i += 2
                else: 
                    answer += 10
                    i += 1
            elif s[i] == 'C': 
                if i+1 < N and s[i+1] == 'D':
                    answer += 400
                    i += 2
                elif i+1 < N and s[i+1] == 'M': 
                    answer += 900
                    i += 2
                else: 
                    answer += 100
                    i += 1
            else: 
                answer += symbols[s[i]]
                i += 1
                
        return answer

 

더 나은 풀이 : 

class Solution:
    def romanToInt(self, s: str) -> int:
        symbols = {"I": 1, "V": 5, "X": 10, "L":50, "C": 100, "D": 500, "M": 1000,
        "IV": 4, "IX": 9, "XL": 40,   "XC": 90, "CD":400, "CM": 900}
        N = len(s)
        answer = 0 
        i = 0 
        while i < N: 
            # substraction 예외 처리 
            if i+1 < N and s[i] + s[i+1] in symbols: # ex. IV, IX, XL, XC, CD, CM
                answer += symbols[s[i] + s[i+1]]
                i += 2
            else:  # 나머지 : 본래 값 dictionary 에서 찾아서 더해주기 
                answer += symbols[s[i]]
                i += 1

                
        return answer
728x90