Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Leetcodeの解説をしてほしいです

解決したいこと

Leetcodeのこちらの問題に関してです

発生している問題・エラー

この問題を考えていくにあたって、以下のコードを記述しました。

# @param {String} s
# @return {Integer}
def roman_to_int(s)
    roma_num_hash = {
        'I' => 1,
        'V' => 5,
        'X' => 10,
        'L' => 50,
        'C' => 100,
        'D' => 500,
        'M' => 1000
    }
    roma_num_subtraction = {
        'IV' => 4,
        'IX' => 9,
        'XL' => 40,
        'XC' => 90,
        'CD' => 400,
        'CM' => 900
    }
    
    i = 0
    result = 0
    while i < s.length
        val = if(rns_arr = roma_num_subtraction[s[i..(i+1)]])
                rns_arr
                i += 1
              else
                roma_num_hash[s[i]] 
              end
        result += val
        i += 1
    end
    result
end

すると、s = "MCMXCIV"としたときに、答えが1012になってしまいます。

なぜ、これだと正解にならないのかが分からないです。

おそらく、

        val = if(rns_arr = roma_num_subtraction[s[i..(i+1)]])
                rns_arr
                i += 1
              else

ここに問題があるとは思うのですが、解決策が分からないです。
分かる方がいらっしゃいましたらご教示いただけると幸いです

0

1Answer

roma_num_subtraction の時は ival に入り ”MCMXCIV”1000 + 2 + 4 + 6 になっているのではないでしょうか
次のように順番を入れ替えてみては

                i += 1
                rns_arr
0Like

Your answer might help someone💌