Python에서 로마 숫자를 정수로 변환

Shikha Chaudhary 2023년10월10일
  1. Python에서 로마 숫자를 정수로 변환
  2. Python에서 로마 숫자를 정수로 변환하는 Python 프로그램
  3. Python 사전을 사용하여 Python에서 로마 숫자를 정수로 변환
  4. Python Roman 모듈을 사용하여 Python에서 로마 숫자를 정수로 변환
  5. 결론
Python에서 로마 숫자를 정수로 변환

어렸을 때 우리 모두는 로마 숫자를 정수로 변환하는 방법을 배웠습니다. 이제 우리가 프로그래머라면 이 작업을 수행하는 Python 프로그램을 만들어 봅시다.

이 기사에서는 Python을 사용하여 로마 숫자를 정수로 변환하는 방법을 배웁니다.

Python에서 로마 숫자를 정수로 변환

실제 코드로 이동하기 전에 로마 숫자를 정수로 변환하는 규칙을 수정하겠습니다. 특정 정수에 사용되는 기본 기호는 다음과 같습니다.

Integer      Roman Numeral
   1               I
   5               V
   10              X
   50              L
   100             C
   500             D
   1000            M

주어진 로마 숫자 문자열에서 해당하는 정수 값을 찾을 수 있다는 것을 알고 있습니다. 그러나 그렇게 할 때 몇 가지 규칙을 따라야 합니다.

  1. 주어진 로마 숫자 문자열에 대해 왼쪽에서 오른쪽으로 이동할 때 기호 값이 감소하거나 동일하게 유지되면 해당 정수를 더하여 최종 답을 정수로 얻습니다.

    XVII
    
    X - 10
    V - 5
    I - 1
    I - 1
    
    10 + 5 + 1 + 1 = 17
    

    위의 예에서 값은 왼쪽에서 오른쪽으로 감소합니다. 그래서 우리는 그것들을 모두 더하고 정수 값으로 17을 얻습니다.

  2. 주어진 로마 숫자 문자열에 대해 왼쪽에서 오른쪽으로 이동할 때 기호 값이 증가하면 큰 값에서 작은 값에 해당하는 정수를 빼서 최종 답을 정수로 얻습니다.

    XL
    
    X - 10
    L - 50
    
    50 - 10 = 40
    

    위의 예에서 값은 왼쪽에서 오른쪽으로 증가합니다. 따라서 정수 값으로 40을 얻기 위해 이들을 뺍니다.

로마 숫자를 정수로 변환하는 코드를 작성하는 동안 이 두 가지 규칙을 기억해야 합니다. 또한 사전 외에도 로마 숫자를 정수로 변경하는 몇 가지 방법을 더 사용할 수 있습니다.

하나씩 살펴보겠습니다.

Python에서 로마 숫자를 정수로 변환하는 Python 프로그램

로마 숫자를 정수로 변환하는 가장 간단한 방법은 if 문을 사용하여 기본 로마 기호를 저장하는 것입니다. 다음은 동일한 코드입니다.

# function to store the basic roman symbols
def map_symbols(s):
    if s == "I":
        return 1
    if s == "V":
        return 5
    if s == "X":
        return 10
    if s == "L":
        return 50
    if s == "C":
        return 100
    if s == "D":
        return 500
    if s == "M":
        return 1000
    return -1


# function to perform the conversion
def change_roman_to_int(roman):
    ans = 0
    i = 0

    while i < len(roman):
        x1 = map_symbols(roman[i])

        if i + 1 < len(roman):
            x2 = map_symbols(roman[i + 1])

            if x1 >= x2:
                ans = ans + x1
                i = i + 1
            else:
                ans = ans + x2 - x1
                i = i + 2

        else:
            ans = ans + x1
            i = i + 1

    return ans


# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))

출력:

Enter the roman numeral: MLXVI
The integer equivalent is:
1066

이 코드의 작동 방식을 살펴보겠습니다.

로마 문자열을 입력으로 입력하면 변수 r에 저장되고 change_roman_to_int 함수로 전달됩니다. 이 함수 내에서 while 루프를 사용하여 전체 문자열을 반복합니다.

또한 while 루프가 각 값을 처리할 때 while 루프 내부의 if-else 문은 다음을 수행합니다.

  1. 현재 기호의 값이 다음 기호의 값보다 크거나 같으면 현재 값이 변수 ans에 추가됩니다.
  2. 그렇지 않으면 다음 기호의 값이 ans 변수에 더해진 다음 현재 값에서 뺍니다.

이것이 본질적으로 이 코드가 작동하는 방식입니다.

이제 파이썬 사전을 사용하여 로마 숫자를 정수로 변환하는 또 다른 방법을 살펴보겠습니다.

Python 사전을 사용하여 Python에서 로마 숫자를 정수로 변환

여기서 기본 아이디어는 동일하게 유지됩니다. 유일한 변경 사항은 if 문 대신 사전을 사용하여 로마 숫자와 해당 정수 값을 저장한다는 것입니다.

다음은 동일한 코드입니다.

# function to convert roman numeral into an integer
def change_roman_to_int(roman):

    # dictionary to store the roman-integer values
    map_symbols = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}

    ans = 0
    for i in range(len(roman)):
        if i > 0 and map_symbols[roman[i]] > map_symbols[roman[i - 1]]:
            ans += map_symbols[roman[i]] - 2 * map_symbols[roman[i - 1]]
        else:
            ans += map_symbols[roman[i]]
    return ans


# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))

출력:

Enter the roman numeral: MMMCMLXX
The integer equivalent is:
3970

for 루프 또는 while 루프를 사용하여 입력 문자열을 반복할 수 있습니다. 둘 다 유사하게 작동하기 때문입니다.

아래 코드와 같이 사전과 함께 enumerate 기능을 사용할 수도 있습니다.

# function to convert roman numeral into an integer
def change_roman_to_int(roman):

    # dictionary to store the roman-integer values
    map_symbols = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}

    ans = 0
    l = len(roman)
    for (i, v) in enumerate(roman):
        if i < l - 1 and map_symbols[v] < map_symbols[roman[i + 1]]:
            ans -= map_symbols[v]
        else:
            ans += map_symbols[v]

    return ans


# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))

출력:

Enter the roman numeral: MCMXCIV
The integer equivalent is:
1994

우리는 사전에 7개의 기본 로마 기호만 추가했습니다. 더 많은 사용자 지정 기호를 추가하면 코드를 훨씬 더 단순화할 수 있습니다.

아래 주어진 코드를보십시오.

# function to change a roman numeral into an integer
def change_roman_to_int(roman):
    custom_symbols = {"IV": -2, "IX": -2, "XL": -20, "XC": -20, "CD": -200, "CM": -200}
    map_symbols = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
    ans = 0

    for i in roman:
        ans += map_symbols[i]

    for i in range(len(roman) - 1):
        merge = str(roman[i] + roman[i + 1])
        if merge in custom_symbols:
            ans += custom_symbols[merge]

    return ans


# driver code
r = input("Enter the roman numeral: ")
print("The integer equivalent is: ")
print(change_roman_to_int(r))

출력:

Enter the roman numeral: MCMXCIV
The integer equivalent is:
1994

이 코드의 영리함에 놀라지 않으셨습니까? 이 코드가 어떻게 작동하는지 살펴보겠습니다.

change_roman_to_int 함수 내부에는 두 개의 사전이 있습니다. 보통 7개의 값이 있는 map_symbols 사전과 한 쌍의 로마 기호에 해당하는 음수 값이 있는 custom_symbols 사전입니다.

또한 첫 번째 for 루프는 모든 로마 기호의 정수 값을 더하고 합계를 변수 ans에 저장합니다. 이 단계는 다음과 같습니다.

MCMXCIV
M = 1000, C = 100, M = 1000, X = 10, C = 100, I = 1, V = 5

1000 + 100 + 1000 + 10 + 100 + 1 + 5 = 2216
ans = 2216

그런 다음 두 번째 for 루프는 로마 문자열을 반복하여 한 번에 두 개의 기호를 가져와 merge 변수에 문자열로 저장합니다. 이 for 루프 내의 if 문은 병합된 쌍이 사전 custom_symbols에 있는지 확인합니다.

해당 음수 값이 발견되면 ans 변수에 추가됩니다. 이 단계는 다음과 같습니다.

MC - Not found

CM - Found
ans = 2216 + (-200)
ans = 2016

MX - Not found

XC - Found
ans = 2016 + (-20)
ans = 1996

CI - Not found

IV - Found
ans = 1996 + (-2)
ans = 1994

이것이 본질적으로 이 코드가 작동하는 방식입니다.

우리는 지금까지 이 모든 코드를 작성해 왔습니다. 이제 편히 앉아서 Python이 작업을 수행하도록 합시다.

Python Roman 모듈을 사용하여 Python에서 로마 숫자를 정수로 변환

로마 숫자를 정수로 변환하는 함수가 있는 모듈이 있어야 한다는 사실을 모르는 사람이 어떻게 Python을 사용할 수 있습니까? 음, 그 모듈은 로마라고 불립니다.

이 모듈을 다운로드하려면 cmd에서 다음 명령을 실행하십시오.

pip install roman

출력:

Downloading roman-3.3-py2.py3-none-any.whl (3.9 kB)
Installing collected packages: roman
Successfully installed roman-3.3

모듈이 설치되면 위의 메시지가 표시되어야 합니다.

이제 이 모듈을 코드로 가져오고 fromRoman() 함수를 사용하여 로마 숫자를 정수로 변환할 수 있습니다.

import roman

x = roman.fromRoman("MCMXCIV")
print(x)

출력:

1994

Python의 roman 모듈에 대한 자세한 내용은 링크를 참조하십시오.

결론

이 기사에서 우리는 파이썬에서 로마 숫자를 정수로 변환하는 몇 가지 매우 흥미로운 방법을 살펴보았습니다. 이를 달성하기 위해 Python if 문과 Python 사전을 사용했습니다.

또한 로마자 쌍에 음수 값을 사용하여 코드를 더 쉽고 짧게 만드는 방법을 살펴보았습니다. 마침내 우리는 fromRoman() 함수를 사용하여 로마 숫자를 정수로 변환하는 Python의 roman 모듈을 사용하는 것을 보았습니다.

관련 문장 - Python Integer