alpyrithm_알파이리즘

[알고리즘][Python] 백준(BOJ) 2608 로마 숫자_파이썬 본문

Algorithm/백준 알고리즘_Python

[알고리즘][Python] 백준(BOJ) 2608 로마 숫자_파이썬

알파이 2020. 10. 10. 07:52

 

2608 로마 숫자    www.acmicpc.net/problem/2608

 

2608번: 로마 숫자

첫째 줄과 둘째 줄에 하나씩 로마 숫자로 표현된 수가 주어진다. 입력된 각 수는 2000 보다 작거나 같고, 두 수의 합은 4000보다 작다.

www.acmicpc.net

 

 

 

문제 풀기 전 공부할 것 : 수학, 구현

 

 

 

 

 

 

 

풀이

<내용>

  • 로마 숫자를 아라비아 숫자로 바꾸는 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
반응형
Comments