こちらは「Roman To Integer」のPythonによる解答例となっております。この問題は、ローマ数字が与えられたときに、それを整数に変換する問題です。
問題
ローマ数字が与えられたとき、それを整数に変換して返します。
s
は、ローマ数字で表された文字列で、長さは1
以上15
以下です。s
の文字は、'I'
、'V'
、'X'
、'L'
、'C'
、'D'
、'M'
から成ります。s
は、次のいずれかの形式になっています。- 1 <= s.length <= 15
- s[i]: ‘I’, ‘V’, ‘X’, ‘L’, ‘C’, ‘D’, ‘M’
1 <= ans <= 3999
解法
この問題は、ローマ数字を整数に変換することが求められています。基本的な考え方は、ローマ数字を一つずつ処理して、対応する数値を足し合わせることです。
アルゴリズムの概要を以下に述べます。
- ローマ数字と整数の対応表を作成します。
- 特定のローマ数字の表記を整数に変換するために、ローマ数字を操作します。
- 入力されたローマ数字を一つずつ処理して、対応する数値を足し合わせます。
Pythonコード
以下のコードが、「Roman to Integer」を解くためのPythonプログラムとなります。
### Function ##################################################################
def solve(num=0):
solver = Solution().romanToInt
if 1 <= num <= Input().input: id_LIST = [num]
else: id_LIST = [id+1 for id in range(Input().input)]
for id in id_LIST:
data = Input(id)
ans = solver(data.s)
result = "OK" if ans==data.ans else "NG"
print(f"[{str(id).zfill(3)}] {result}")
### Class #####################################################################
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
1 <= s.length <= 15
s[i]: 'I', 'V', 'X', 'L', 'C', 'D', 'M'
:rtype: int
1 <= ans <= 3999
"""
romanToInt_DICT = {
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000
}
s = s.replace("IV", "IIII") ### 4
s = s.replace("IX", "VIIII") ### 9
s = s.replace("XL", "XXXX") ### 40
s = s.replace("XC", "LXXXX") ### 90
s = s.replace("CD", "CCCC") ### 400
s = s.replace("CM", "DCCCC") ### 900
number = 0
for char in s:
number += romanToInt_DICT[char]
return number
#==============================================================================
class Input:
def __init__(self, num=0):
if num == 1:
self.s = "III"
self.ans = 3
elif num == 2:
self.s = "LVIII"
self.ans = 58
elif num == 3:
self.s = "MCMXCIV"
self.ans = 1994
else:
self.input = 3
### Main ######################################################################
if __name__ == "__main__":
solve()
###############################################################################