카테고리 없음

백준 2608) 로마숫자(python)

밈98 2024. 3. 28. 12:26

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)