[Leetcode] 13. Roman to Integer

bradley·2022년 5월 31일
1

Algorithm

목록 보기
3/12

Problem

Solution

1) 오른쪽 로마자에 해당하는 값 비교 연산

로마자는 왼쪽부터 오른쪽으로 큰 수부터 작은 수 순으로 정렬하기 때문에 작은 수에 해당하는 로마자가 큰 수에 해당하는 로마자보다 앞에 나올 경우 빼면 된다.

class Solution:
    def romanToInt(self, s: str) -> int:
        res = 0
        dict = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
        for i in range(len(s)): # 문자열을 iteration
						# 현재 index가 아닌 다음 index가 문자열 길이보다 작고, 
						# 다음 로마자가 현재 로마자보다 크다면 
            if ( (i + 1) < len(s) ) and dict[s[i + 1]] > dict[s[i]]:
                res -= dict[s[i]] # 현재 로마자에 해당하는 값을 뺀다
            else: # 마지막 로마자이거나 다음 로마자가 현재 로마자보다 작다면 
                res += dict[s[i]] # 현재 로마자에 해당하는 값은 더한다.
        return res

2) 기본 2개 index 조회

dict()에 두 문자로 이루어진 키-값 쌍도 정의한 후 input 값에서 두 문자로 이루어진 키 값을 찾는다. 못 찾으면 예외처리로 한 문자로 이루어진 키의 값을 더한다.

class Solution:
    def romanToInt(self, s: str) -> int:
        dict = {
            'I': 1, 
            'IV': 4, 
            'V': 5, 
            'IX': 9, 
            'X': 10, 
            'XL': 40,
            'L': 50, 
            'XC': 90,
            'C': 100, 
            'CD': 400,
            'D': 500, 
            'CM': 900,
            'M':1000
        }
        
        res, i = 0, 0
        
        while i < len(s):
            try:
                res += dict[s[i] + s[i + 1]] # dict에서 두 문자로 이루어진 키의 값을 찾아 더한다 
                i += 2 # input 문자열의 index를 2칸 건너뛴다
            except (KeyError, IndexError): # 두 문자로 이루어진 키가 없거나 input값의 끝인 경우 예외 처리
                res += dict[s[i]] # dict에서 한 문자로 이루어진 키의 값을 찾아 더한다
                i += 1 # input 문자열의 index를 1칸 건너뛴다
        return res
profile
데이터 엔지니어링에 관심이 많은 홀로 삽질하는 느림보

0개의 댓글