結果

問題 No.518 ローマ数字の和
ユーザー sue_charosue_charo
提出日時 2017-05-28 23:03:53
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
AC  
実行時間 39 ms / 2,000 ms
コード長 4,416 bytes
コンパイル時間 256 ms
コンパイル使用メモリ 13,184 KB
実行使用メモリ 11,904 KB
最終ジャッジ日時 2024-09-21 15:46:58
合計ジャッジ時間 1,903 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

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

ソースコード

diff #

# coding: utf-8
import array, bisect, collections, copy, heapq, itertools, math, random, re, string, sys, time

sys.setrecursionlimit(10 ** 7)
INF = 10 ** 20
MOD = 10 ** 9 + 7


def II(): return int(input())
def ILI(): return list(map(int, input().split()))
def IAI(LINE): return [ILI() for __ in range(LINE)]
def IDI(): return {key: value for key, value in ILI()}


def read():
    N = II()
    R = list(map(str, input().split()))
    return (N, R)


def solve_roma(str):
    l_str = list(str)
    l_str.append(None)
    ans = 0
    now_ind = 0
    dict_roma = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
    while now_ind < len(str):
        if l_str[now_ind + 1] is None:
            ans += dict_roma[l_str[now_ind]]
            break

        if l_str[now_ind] == "I" and l_str[now_ind + 1] == "V":
            ans += 4
            now_ind += 2
        elif l_str[now_ind] == "I" and l_str[now_ind + 1] == "X":
            ans += 9
            now_ind += 2
        elif l_str[now_ind] == "X" and l_str[now_ind + 1] == "L":
            ans += 40
            now_ind += 2
        elif l_str[now_ind] == "X" and l_str[now_ind + 1] == "C":
            ans += 90
            now_ind += 2
        elif l_str[now_ind] == "C" and l_str[now_ind + 1] == "D":
            ans += 400
            now_ind += 2
        elif l_str[now_ind] == "C" and l_str[now_ind + 1] == "M":
            ans += 900
            now_ind += 2
        else:
            ans += dict_roma[l_str[now_ind]]
            now_ind += 1

    return ans


def solve(N, R):
    num_sum = 0
    for r in R:
        ret = solve_roma(r)
        num_sum += ret

    ans = 0

    if num_sum >= 4000:
        ans = "ERROR"
    else:
        l_ans = []
        l_num_sum = list(map(int, reversed(list(str(num_sum)))))
        for bin, num in enumerate(l_num_sum):
            if bin == 0:
                if num == 0:
                    pass
                elif num == 1:
                    l_ans.append("I")
                elif num == 2:
                    l_ans.append("II")
                elif num == 3:
                    l_ans.append("III")
                elif num == 4:
                    l_ans.append("IV")
                elif num == 5:
                    l_ans.append("V")
                elif num == 6:
                    l_ans.append("VI")
                elif num == 7:
                    l_ans.append("VII")
                elif num == 8:
                    l_ans.append("VIII")
                elif num == 9:
                    l_ans.append("IX")
            if bin == 1:
                if num == 0:
                    pass
                elif num == 1:
                    l_ans.append("X")
                elif num == 2:
                    l_ans.append("XX")
                elif num == 3:
                    l_ans.append("XXX")
                elif num == 4:
                    l_ans.append("XL")
                elif num == 5:
                    l_ans.append("L")
                elif num == 6:
                    l_ans.append("LX")
                elif num == 7:
                    l_ans.append("LXX")
                elif num == 8:
                    l_ans.append("LXXX")
                elif num == 9:
                    l_ans.append("XC")
            if bin == 2:
                if num == 0:
                    pass
                elif num == 1:
                    l_ans.append("C")
                elif num == 2:
                    l_ans.append("CC")
                elif num == 3:
                    l_ans.append("CCC")
                elif num == 4:
                    l_ans.append("CD")
                elif num == 5:
                    l_ans.append("D")
                elif num == 6:
                    l_ans.append("DC")
                elif num == 7:
                    l_ans.append("DCC")
                elif num == 8:
                    l_ans.append("DCCC")
                elif num == 9:
                    l_ans.append("CM")
            if bin == 3:
                if num == 0:
                    pass
                elif num == 1:
                    l_ans.append("M")
                elif num == 2:
                    l_ans.append("MM")
                elif num == 3:
                    l_ans.append("MMM")
        ans = "".join(reversed(l_ans))

    return ans


def main():
    params = read()
    print(solve(*params))


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