로마자에서 숫자로 바꾸기 1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요.
-입력: 로마자로 표현된 숫자(문자열)
-출력: 아라비아 숫자
def roman_to_num(s):
rom_dict = {
'I': 1,
'V' : 5,
'X' : 10,
'L' : 50,
'C' : 100,
'D' : 500,
'M' : 1000
}
result = 0
for i, letter in enumerate(s):
result += rom_dict[letter]
if i !=0 and rom_dict[letter] > rom_dict[s[i-1]]:
result -= rom_dict[s[i-1]] *2
return result
print(roman_to_num('MCMXCIV')) # 결과: 1994
print(roman_to_num('IV')) # 결과: 4
print(roman_to_num('III')) # 결과: 3
현재 위치의 문자가 직전 문자의 값보다 크다면 현재 문자의 값 - 직전 문자의 값
을 하도록 되어있다.
하지만 'MCMXCIV'가 입력으로 주어졌을 때를 보면 알 수 있듯이, 단순히 직전 값을 빼주게 되면 이전 반복에서 더해준 값이 그대로 남아있게 되니 직전 문자 값 * 2
만큼을 빼주어야 한다.