【Python】ローマ数字を整数値に変換する【LeetCode】

スポンサーリンク

【Python】ローマ数字を整数値に変換する【LeetCode】

IIIIVなどのローマ数字を整数値に変換する方法をまとめておく。

IIIは3、IVは4といった用に文字列が入力されたときに数値を返すような関数を作る。

Just a moment...

ローマ数字と値の対応

ローマ数字と値の対応関係はこのようになっている。

基本的に値の大きい文字が左側にくる。

例えば、

Input: s =  "MC"
Output: 1100

ただし、値の小さい文字が左側にくることもある。

例えば、

Input: s = "IV"
Output: 4

この場合にも対応する必要がある。

対応関係を表す辞書を作成

ローマ数字と値の組を表す辞書を作成する。

dict = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}

文字列を右端から読んでいく

文字列を右端から読んでいって、左の文字の方が小さかったら、その文字に対応する値は足すのではなく引く。

sum = 0
y = 0 # 比較用の変数
for i in s[::-1]: # sは入力された文字列のこと
    if y <= dict[i] or y == 0:
        sum += dict[i]
        y = dict[i]
    else:
        sum -= dict[i]
return sum

こんなに簡単に書けてしまう。

右端から読んで足すのか引くのかを選択するという考えが出てくれば書けてしまうコード。

ちなみに自分のコードは…

自分は↑のように右から読んでいくという考えが出なかったので左から地道に読んだ。

自分が書いたコードは↓

def romanToInt(self, s):

        dict = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
        
        sum = 0
        idx = 0
        if len(s) == 1:
            return dict[s]
        
        else:
            for i in range(len(s)):
                if idx+1 < len(s):
                    if dict[s[idx]] >= dict[s[idx+1]]:
                        sum += dict[s[idx]]
                        idx += 1
                    elif s[idx] == 'I' and s[idx+1] == 'V':
                        sum += 4
                        idx += 2
                    elif s[idx] == 'I' and s[idx+1] == 'X':
                        sum += 9
                        idx += 2
                    elif s[idx] == 'X' and s[idx+1] == 'L':
                        sum += 40
                        idx += 2
                    elif s[idx] == 'X' and s[idx+1] == 'C':
                        sum += 90
                        idx += 2
                    elif s[idx] == 'C' and s[idx+1] == 'D':
                        sum += 400
                        idx += 2
                    elif s[idx] == 'C' and s[idx+1] == 'M':
                        sum += 900
                        idx += 2
                elif idx+1 == len(s):
                    sum += dict[s[idx]]
                    return sum
                else:
                    return sum

処理は遅いけど求めることはできる。

左の文字から順に見ていって値を足していくというごく単純なものです。
でもコードがかなり長くなってしまう笑。

人気記事

人気記事はこちら。

CUDA、cuDNNのバージョンをターミナルで調べるコマンド
【Pytorch】テンソルの次元を追加・削除する方法【dim】
【Pytorch】テンソルを連結する方法(cat・stack)
【Protobuf】"TypeError: Descriptors cannot not be created directly."を解決する【solved】
【Python】Tensorflowをダウングレード・アップグレードするコマンド

新着記事

新着記事はこちら。

【帯広】営業時間の短い「はなとかち」の豚丼を食べる。【北海道】
【伊豆】ItalianRestaurant POMODOROでランチ【静岡】
【静岡】熱海プリン本店で購入。人気で列に並ぶ。いちごプリンを食べる。
【静岡】伊豆パノラマパークで良い景色を眺める。
【伊豆】北川温泉 磯辺で夕食。Airbnbでトラストメゾン北川に宿泊【静岡】
タイトルとURLをコピーしました