문제
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