https://www.acmicpc.net/problem/2608
주어진 두개의 로마숫자를 더하여 아라비아 숫자로 표현하고, 그 아라비아 숫자를 다시 로마숫자로 표현하여 출력하는 문제이다.
로마숫자를 아라비아 숫자로 변환해주는 to_num(s)함수와 아라비아 숫자를 로마숫자로 변환해주는 to_str(n)함수를 구현해주었다.
import sys
input =sys.stdin.readline
s1 = input().strip()
s2 = input().strip()
sign = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
sign2 = {'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900}
#문자->숫자
def to_num(s):
l=len(s) #문자열 길이
num =0 #결과값 저장
visited = [0]*l
for i in range(l):
if visited[i]==0: #아직 방문 x
if i+1<len(s) and s[i:i+2] in sign2.keys(): #작은 숫자가 큰 숫자의 왼쪽에 오는 경우
visited[i], visited[i+1] =1,1
num += int(sign2[s[i:i+2]])
else:
visited[i]=1
num+=int(sign[s[i]])
return num
#숫자->문자
def to_str(n):
s=""
while n>0:
if n>=1000:
s+="M"
n-=1000
elif n>=900:
s+="CM"
n-=900
elif n>=500:
s+="D"
n-=500
elif n>=400:
s+="CD"
n-=400
elif n>=100:
s+="C"
n-=100
elif n>=90:
s+="XC"
n-=90
elif n>=50:
s+="L"
n-=50
elif n>=40:
s+="XL"
n-=40
elif n>=10:
s+="X"
n-=10
elif n>=9:
s+="IX"
n-=9
elif n>=5:
s+="V"
n-=5
elif n>=4:
s+="IV"
n-=4
elif n>=1:
s+="I"
n-=1
return s
nresult = to_num(s1)+to_num(s2)
print(nresult)
print(to_str(nresult))