로마에서 쓰던 로마숫자가 있는데 이를 지금쓰는 숫자로 바꾸는 문제이다. 이 문제에서의 가장 큰 어려움은 대부분의 로마 숫자는 하나의 값으로 치환되어 처리되어 더하면 되지만, 가끔
IV
와 같이두개를 묶어 계산해줄 필요가 있는 값들이 있다.
빈리스트를 만들어서 로마숫자로 들어온값이 만약 혼자 계산할 값이면 바로 리스트에 집어넣고 같이 묶어서 계산할 값이면 묶어서 리스트에 집어넣었다.
그러면 그 리스트의 로마 숫자들은 각각 계산하는 단위가 되는데, 이 리스트안에 들어있는 값(로마숫자)들을 현재 숫자로 바꿔 더하면 된다.
class Solution:
def romanToInt(self, s: str) -> int:
dic = {"M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1}
letters = []
for i, letter in enumerate(s):
if i == 0 or len(letters[-1]) == 2:
letters.append(letter)
# 가장 최근꺼의 값보다 지금 값이 더 크면 letters의 값을 둘이 합친 글자로 넣어줌
elif dic[letters[-1]] < dic[letter]:
letters[-1] = letters[-1] + letter
# 가장 최근꺼 값이 지금 값보다 작거나 같으면 그냥 새로운 값을 letters에 추가해줌
elif dic[letters[-1]] >= dic[letter]:
letters.append(letter)
sum = 0
for letter in letters:
if len(letter) == 1:
sum += dic[letter]
elif len(letter) == 2:
sum += dic[letter[1]] - dic[letter[0]]
return sum