Suppose we have a roman numeral; we have to convert it into number. As we know a Roman numeral is represented by symbols from left to right from greatest to least, the only exception being when representing one less than a symbol. Some roman numeral symbol meanings are as follows:
'M': 1000
'D': 500
'C': 100
'L': 50
'X': 10
'V': 5
'I': 1
So, if the input is like numeral = "MCLXVI", then the output will be 1166, as M = 1000, C = 100, total is 1100, then L = 50, X = 10, VI = 6 so total is 1166.
To solve this, we will follow these steps:
take numeral list as mentioned above
ans := 0
n := size of numeral
for each index idx and value c numeral, do
if idx < n - 1 and d[c] < d[numeral[idx + 1]], then
ans := ans - d[c]
otherwise,
ans := ans + d[c]
return ans
Let us see the following implementation to get better understanding:
Example
class Solution: def solve(self, numeral): d = {"M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1} ans = 0 n = len(numeral) for (idx, c) in enumerate(numeral): if idx < n - 1 and d[c] < d[numeral[idx + 1]]: ans -= d[c] else: ans += d[c] return ans ob = Solution() numeral = "MCLXVI" print(ob.solve(numeral))
Input
"MCLXVI"
Output
1166