Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 로마자를 정수로


로마 문자가 있다고 가정합니다. 우리는 그것들을 정수로 변환해야 합니다. 우리가 알고 있듯이 로마 숫자는 아래와 같이 몇 가지 다른 기호로 나타납니다 -

숫자
1
V 5
X 10
L 50
C 100
D 500
M 1000

로마 숫자를 자세히 보면 숫자가 'II'라고 가정하면 2이므로 'I'가 2개 더해진 것입니다. XII의 경우 12이므로 실제로 X + II =10 + 2 =12입니다. 로마 숫자 4는 IIII가 아니라 IV입니다. 조금 까다롭습니다.

  • V(5)와 X(10) 앞에 사용하여 각각 4와 9로 만들 수 있습니다.

  • L(50)과 C(100) 앞에 X cab을 사용하여 각각 40과 90을 만듭니다.

  • C를 D(500) 및 M(1000) 앞에 사용하여 각각 400 및 900으로 만들 수 있습니다.

이 경우 숫자를 1에서 3999로 변환할 수 있는 하나의 로마자를 정수로 변환하는 변환기를 만듭니다.

이 문제를 해결하기 위해 가능한 숫자와 해당 값 및 4, 9, 40, 90, 400, 900과 같은 특수 값을 만들 것입니다. 이제 주어진 문자열을 스캔하고, 일부 하위 문자열이 테이블에 있으면 해당 값을 다음으로 가져옵니다. 결과를 확인한 다음 다음을 확인하고 다음 일치를 위해 결과에 값을 더하고 최종적으로 숫자를 형성합니다.

더 나은 이해를 위해 구현을 살펴보겠습니다.

예제(파이썬)

class Solution(object):
   def romanToInt(self, s):
      """
      :type s: str
      :rtype: int
      """
      roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900}
      i = 0
      num = 0
      while i < len(s):
         if i+1<len(s) and s[i:i+2] in roman:
            num+=roman[s[i:i+2]]
            i+=2
         else:
            #print(i)
            num+=roman[s[i]]
            i+=1
      return num
ob1 = Solution()
print(ob1.romanToInt("III"))
print(ob1.romanToInt("CDXLIII"))

입력

"III"
"CDXLIII"

출력

3
443