結果

問題 No.518 ローマ数字の和
ユーザー yumechiyumechi
提出日時 2017-05-28 22:32:13
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
AC  
実行時間 34 ms / 2,000 ms
コード長 1,866 bytes
コンパイル時間 275 ms
コンパイル使用メモリ 12,672 KB
実行使用メモリ 10,752 KB
最終ジャッジ日時 2024-09-21 15:38:43
合計ジャッジ時間 1,748 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 30 ms
10,752 KB
testcase_01 AC 30 ms
10,752 KB
testcase_02 AC 31 ms
10,624 KB
testcase_03 AC 30 ms
10,624 KB
testcase_04 AC 30 ms
10,752 KB
testcase_05 AC 29 ms
10,624 KB
testcase_06 AC 29 ms
10,624 KB
testcase_07 AC 29 ms
10,624 KB
testcase_08 AC 30 ms
10,624 KB
testcase_09 AC 30 ms
10,624 KB
testcase_10 AC 34 ms
10,624 KB
testcase_11 AC 29 ms
10,752 KB
testcase_12 AC 30 ms
10,624 KB
testcase_13 AC 29 ms
10,624 KB
testcase_14 AC 30 ms
10,752 KB
testcase_15 AC 31 ms
10,624 KB
testcase_16 AC 30 ms
10,752 KB
testcase_17 AC 30 ms
10,624 KB
testcase_18 AC 30 ms
10,624 KB
testcase_19 AC 31 ms
10,624 KB
testcase_20 AC 31 ms
10,752 KB
testcase_21 AC 30 ms
10,624 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

def roman2arabic(roman: str) -> int:
    special_case = { "IV" : 4, "IX" : 9, "XL" : 40, "XC" : 90, "CD" : 400, "CM" : 900 }
    normal_case = { "I" : 1, "V" : 5, "X" : 10, "L" : 50, "C" : 100, "D" : 500, "M" : 1000 }
    arabic = 0
    for s in special_case.keys():
        if s in roman:
            arabic += special_case[s]
            roman = roman.replace(s, "")
    for n in normal_case.keys():
        if n in roman:
            arabic += roman.count(n) * normal_case[n]
    return arabic

def arabic2roman(arabic: int) -> str:
    roman = ""
    while arabic > 0:
        if arabic >= 1000:
            roman += "M"
            arabic -= 1000
        elif arabic >= 900:
            roman += "CM"
            arabic -= 900
        elif arabic >= 500:
            roman += "D"
            arabic -= 500
        elif arabic >= 400:
            roman += "CD"
            arabic -= 400
        elif arabic >= 100:
            roman += "C"
            arabic -= 100
        elif arabic >= 90:
            roman += "XC"
            arabic -= 90
        elif arabic >= 50:
            roman += "L"
            arabic -= 50
        elif arabic >= 40:
            roman += "XL"
            arabic -= 40
        elif arabic >= 10:
            roman += "X"
            arabic -= 10
        elif arabic >= 9:
            roman += "IX"
            arabic -= 9
        elif arabic >= 5:
            roman += "V"
            arabic -= 5
        elif arabic >= 4:
            roman += "IV"
            arabic -= 4
        else:
            roman += "I"
            arabic -= 1
    return roman 

def solve():
    n = input()
    ans = 0
    for roman in input().split():
        ans += roman2arabic(roman)
    if ans > 3999:
        print("ERROR")
        return
    # print(ans)
    ans_roman = arabic2roman(ans)
    print(ans_roman)

if __name__=="__main__":
    solve()
0