https://www.acmicpc.net/problem/2608
2608번: 로마 숫자
첫째 줄과 둘째 줄에 하나씩 로마 숫자로 표현된 수가 주어진다. 입력된 각 수는 2000 보다 작거나 같고, 두 수의 합은 4000보다 작다.
www.acmicpc.net
import sys
input = sys.stdin.readline
r1 = input().rstrip()
r2 = input().rstrip()
roma = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
roma2 = {'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900}
roman3 = {1000: "M", 900: "CM", 500: "D", 400: "CD", 100: "C", 90: "XC", 50: "L", 40: "XL", 10: "X", 9: "IX", 5: "V", 4: "IV", 1: "I"}
# 로마를 숫자로
def convert(ss):
res = 0
i =0
while i<len(ss):
if i+1 < len(ss): # 두자리 IV나 XL같은 문자열이 있으면 변환
if ss[i:i+2] in roma2:
res += roma2[ss[i:i+2]]
i+=2
continue #하고 바로 넘어가기
if ss[i] in roma: # 위에 두자리 문자열이 없으면 한자리로 변환해서 더해주기
res += roma[ss[i]]
i+=1
return res
# 숫자를 로마로
def convert2(num):
tmp = "" #문자열 배열 선언해주기
while num > 0: #10의자리 단위로 끊는 문제다 이건
for k,v in roman3.items(): # 배열 키랑 값으로 쭉 돌자 (대신 집합을 내림차순으로 만들어야함)
while num >= k: #지금 수가 키값보다 크면
tmp += v #그 값을 더해주고
num -= k # 키값빼주기
return tmp
result = convert(r1) + convert(r2)
res2 = convert2(result)
print(result)
print(res2)