[Python] 백준 2608_로마숫자
https://www.acmicpc.net/problem/2608
주어진 두개의 로마숫자를 더하여 아라비아 숫자로 표현하고, 그 아라비아 숫자를 다시 로마숫자로 표현하여 출력하는 문제이다.
로마숫자를 아라비아 숫자로 변환해주는 to_num(s)함수와 아라비아 숫자를 로마숫자로 변환해주는 to_str(n)함수를 구현해주었다.
- to_num(s)함수
딕셔너리를 이용하여 s의 인덱스별로 해당 문자(키)가 가지는 값을 num 변수에 계속 더해주는 과정을 반복하여 모든 인덱스를 다 확인하면 num값을 반환해준다. - to_str(n)함수
구현 방법이 떠오르지 않아 if문으로 일일히 문자를 확인해주고 문자를 s라는 변수에 계속 더해가면서 답을 구해주는 방식이다.더 효율적인 방법이 있을 것 같아서 아쉬운 코드이다.
코드
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))
Author And Source
이 문제에 관하여([Python] 백준 2608_로마숫자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@soobin519/Python-백준-2608로마숫자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)