Skip to main content

Roman Number to Integer

This website describe common assumption and failure during gfg coding.

python

Failed

class Solution:
    def romanToDecimal(self, s): 
        # code here
        val={
           '':1,
           'X':10,
           'L':50,
           'M':1000,
           'C':100,
           'V':5
        }
        sum=0
        s=s[::-1]
        count=0
        for i in s:
            if count==1:
                count=0
                sum-=val[i]
            else:
                sum+=val[i]
                count+=1
            
                
          

        return sum


Reason

Your current implementation of `romanToDecimal()` has the right spirit, but the logic for subtractive notation (like `IV`, `IX`, `XL`, etc.) is off. You're using a `count` flag, which doesn't reliably detect when subtraction should occur.

---

⚠️ Issues:

1. Incorrect subtraction logic: Roman numerals subtract only when a smaller value precedes a larger one.

2. Missing symbols You're missing `'D': 500` in your `val` dictionary.

3. Reversing the string complicates the logic unnecessarily.

---

✅ Correct Logic:

  1. Traverse left to right.
  2. If the current value is less than the next value → subtract it.
  3. Otherwise → add it.
---

✅ Fixed Version:

python

class Solution:
    def romanToDecimal(self, s): 
        val = {
            'I': 1, 'V': 5, 'X': 10,
            'L': 50, 'C': 100, 'D': 500, 'M': 1000
        }
        
        total = 0
        prev = 0
        
        for ch in reversed(s):
            curr = val[ch]
            if curr < prev:
                total -= curr
            else:
                total += curr
            prev = curr
        
        return total

🧪 Example:

python

s = "MCMIV"

M = 1000, CM = 900, IV = 4 → Total = 1904

print(Solution().romanToDecimal(s)) # Output: 1904 ✅

Conclusion>

This version matches the expected behavior described on [GeeksforGeeks](https://www.geeksforgeeks.org/problems/roman-number-to-integer3201/1). <

Comments