Leet code 13. Roman to Integer

재피터노트북·2021년 8월 14일
1

문제풀러가기!

문제

Input: s = "III"
Output: 3

Input: s = "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.

Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

조건
1. 로마 숫자는 일반적으로 왼쪽에서 오른쪽으로 큰 것에서 작은 것 순으로 표기한다.
2. I다음에 V가 오면 V - I 를 해서 4가 되고, I다음에 X가 오면 X - I를 해서 9가 된다.(IV = 4, IX = 9)
3. X 다음 L이 오면 L - X = 40, X 다음 C오면 C - X = 90
4. C 다음 D오면 D - C = 400, C 다음 M오면 M - C = 900

문제 접근
1. 위에 주어진 Symbol, Value 값들을 dictionary형태로 key, value 값으로 나누어 준다.
2. enumerate를 이용한다.
3. 조건을 잘보면 I < V, I, < X, X < L, X < C, C < D, C < M 이렇게 다음에 오는 값이 현재값보다 작다면 answer에 현재값을 더하고 그렇지 않으면 현재값에 -1을 곱하고 answer에 현재값을 더한다.
4. 주어진 input값(s)을 이용해 첫번째 값하고 그 다음 index의 값을 비교한다.




내가 작성한 코드

class Solution:
    def romanToInt(self, s: str) -> int:
        dic = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
        answer = 0
        if len(s) == 1:
            return dic[s[0]]
        for idx, i in enumerate(s):
            if idx != len(s)-1:
                next = dic[s[idx+1]]

            if dic[i] >= next:
                answer += dic[i]
            else:
                answer += (-1 * dic[i])

        return answer
profile
난 이 재 선

0개의 댓글