alpyrithm_알파이리즘
[알고리즘][Python] 백준(BOJ) 2608 로마 숫자_파이썬 본문
2608 로마 숫자 www.acmicpc.net/problem/2608
문제 풀기 전 공부할 것 : 수학, 구현
풀이
<내용>
- 로마 숫자를 아라비아 숫자로 바꾸는 to_num이라는 함수를 구현했다.
- 합을 구한 후 하나씩 차례로 로마 숫자로 바꾸는 과정을 구현했다.
<코드>
nums = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
extra = {'IV':4, 'IX':9, 'XL':40, 'XC':90, 'CD':400, 'CM':900}
def to_num(r):
res = 0
n = len(r)
idx = 0
while idx < n:
if idx == n-1:
res += nums[r[idx]]
break
flag = True
if r[idx] == 'I':
if r[idx+1] == 'V' or r[idx+1] == 'X':
res += extra[r[idx:idx+2]]
flag = False
elif r[idx] == 'X':
if r[idx+1] == 'L' or r[idx+1] == 'C':
res += extra[r[idx:idx+2]]
flag = False
elif r[idx] == 'C':
if r[idx+1] == 'D' or r[idx+1] == 'M':
res += extra[r[idx:idx+2]]
flag = False
if not flag:
idx += 2
else:
res += nums[r[idx]]
idx += 1
return res
a, b = input(), input()
a = to_num(a)
b = to_num(b)
total = a+b
print(total)
ans = ''
total = str(total)
t = len(total)
n = len(total)
while n:
num = int(total[t-n])
if n == 4:
ans += 'M'*num
elif n == 3:
if num == 9:
ans += 'CM'
elif num == 4:
ans += 'CD'
else:
if num >= 5:
ans += 'D'
ans += 'C'*(num%5)
elif n == 2:
if num == 9:
ans += 'XC'
elif num == 4:
ans += 'XL'
else:
if num >= 5:
ans += 'L'
ans += 'X'*(num%5)
elif n == 1:
if num == 9:
ans += 'IX'
elif num == 4:
ans += 'IV'
else:
if num >= 5:
ans += 'V'
ans += 'I'*(num%5)
n -= 1
print(ans)
+) 다시 간단하게 구현해보기.
728x90
반응형
'Algorithm > 백준 알고리즘_Python' 카테고리의 다른 글
[알고리즘][Python] 백준(BOJ) 1940 주몽_파이썬 (0) | 2020.10.12 |
---|---|
[알고리즘][Python] 백준(BOJ) 2966 찍기_파이썬 (0) | 2020.10.11 |
[알고리즘][Python] 백준(BOJ) 9536 여우는 어떻게 울지?_파이썬 (0) | 2020.10.09 |
[알고리즘][Python] 백준(BOJ) 2693 N번째 큰 수_파이썬 (0) | 2020.10.08 |
[알고리즘][Python] 백준(BOJ) 7785 회사에 있는 사람_파이썬 (0) | 2020.10.07 |
Comments