백준 2608 로마 숫자

전.py / / 2020. 12. 12. 23:55
728x90

https://www.acmicpc.net/problem/2608

 

2608번: 로마 숫자

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

www.acmicpc.net

roma = ['M', 'D', 'C', 'L', 'X','V', 'I']
num = [1000, 500, 100, 50, 10, 5, 1]

a = list(input())
b = list(input())
hap = 0

exc = ['CM', 'CD', 'XC', 'XL', 'IX', 'IV']
e = 0
pos = 0
while 1:
    if pos == len(a)-1:
        break
        
    if exc[e] == a[pos] + a[pos+1]:
        if num[e] >= 500:
            hap += (num[e] - 100)
        elif num[e] >= 50:
            hap += (num[e] - 10)
        else:
            hap += (num[e] - 1)
        exc[e] = 0
        if e % 2 == 0:
            exc[e+1] = 0
        else:
            exc[e-1] = 0
        a[pos] = ''
        a[pos+1] = ''
        
    if e == 5:
        e = 0
        pos += 1
        continue
    e += 1
r = 0  
pos = 0
while 1:
    if r == 7:
        r = 0
        pos += 1
        
    if pos == len(a):
        break
        
    if roma[r] == a[pos]:
        hap += num[r]
        a[pos] = ''
        r = 0
        pos += 1
        continue
        
    else:
        r += 1

exc = ['CM', 'CD', 'XC', 'XL', 'IX', 'IV']
e = 0
pos = 0
while 1:
    if pos == len(b)-1:
        break

    if exc[e] == b[pos] + b[pos+1]:
        if num[e] >= 500:
            hap += (num[e] - 100)
        elif num[e] >= 50:
            hap += (num[e] - 10)
        else:
            hap += (num[e] - 1)
        exc[e] = 0
        if e % 2 == 0:
            exc[e+1] = 0
        else:
            exc[e-1] = 0
        b[pos] = ''
        b[pos+1] = ''
        
    if e == 5:
        e = 0
        pos += 1
        continue
    e += 1
r = 0  
pos = 0
while 1:
    if r == 7:
        r = 0
        pos += 1
        
    if pos == len(b):
        break
        
    if roma[r] == b[pos]:
        hap += num[r]
        b[pos] = ''
        r = 0
        pos += 1
        continue
        
    else:
        r += 1

result1 = hap
print(result1)
result2 = ''
# 합을 로마 숫자로
# ['M','CM','D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']
# [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
cnt = [3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3]
while 1:
    if hap == 0:
        break
    if hap >= 1000 and cnt[0] > 0:
        hap -= 1000
        cnt[0] -= 1
        print("M", end = '')
    elif hap >= 900 and cnt[1] > 0:
        hap -= 900
        cnt[1] -= 1
        print("CM", end = '')
    elif hap >= 500 and cnt[2] > 0:
        hap -= 500
        cnt[2] -= 1
        print("D", end = '')
    elif hap >= 400 and cnt[3] > 0:
        hap -= 400
        cnt[3] -= 1
        print("CD", end = '')
    elif hap >= 100 and cnt[4] > 0:
        hap -= 100
        cnt[4] -= 1
        print("C", end = '')
    elif hap >= 90 and cnt[5] > 0:
        hap -= 90
        cnt[5] -= 1
        print("XC", end = '')
    elif hap >= 50 and cnt[6] > 0:
        hap -= 50
        cnt[6] -= 1
        print("L", end = '')
    elif hap >= 40 and cnt[7] > 0:
        hap -= 40
        cnt[7] -= 1
        print("XL", end = '')
    elif hap >= 10 and cnt[8] > 0:
        hap -= 10
        cnt[8] -= 1
        print("X", end = '')
    elif hap >= 9 and cnt[9] > 0:
        hap -= 9
        cnt[9] -= 1
        print("IX", end = '')
    elif hap >= 5 and cnt[10] > 0:
        hap -= 5
        cnt[10] -= 1
        print("V", end = '')
    elif hap >= 4 and cnt[11] > 0:
        hap -= 4
        cnt[11] -= 1
        print("IV", end = '')
    elif hap >= 1 and cnt[12] > 0:
        hap -= 1
        cnt[12] -= 1
        print("I", end = '')

반응형

'전.py' 카테고리의 다른 글

백준 2606 바이러스  (0) 2020.12.12
백준 2607 비슷한 단어  (0) 2020.12.12
백준 1289 팰린드롬수  (0) 2020.12.12
백준 1371 가장 많은 글자  (0) 2020.12.12
백준 1568 새  (0) 2020.12.12
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기