백준 #2608 로마 숫자
코드1
import sys
sys.stdin = open("input.txt")
input = sys.stdin.readline
dict = {"M": 1000, "CM": 900, "D": 500, "CD": 400, "C": 100,
"XC": 90, "L": 50, "XL": 40, "X": 10, "IX": 9, "V": 5,
"IV": 4, "I": 1}
a = list(input().rstrip())
b = list(input().rstrip())
num_a = 0
num_b = 0
flag_a = True
flag_b = True
for i in range(len(a) - 1):
if flag_a:
if dict[a[i + 1]] > dict[a[i]]:
num_a += (dict[a[i + 1]] - dict[a[i]])
flag_a = False
else:
num_a += dict[a[i]]
else:
flag_a = True
if flag_a:
num_a += dict[a[-1]]
for i in range(len(b) - 1):
if flag_b:
if dict[b[i + 1]] > dict[b[i]]:
num_b += (dict[b[i + 1]] - dict[b[i]])
flag_b = False
else:
num_b += dict[b[i]]
else:
flag_b = True
if flag_b:
num_b += dict[b[-1]]
num = num_a + num_b
print(num)
answer = ""
for rome in list(dict.keys()):
temp = num // dict[rome]
for _ in range(temp):
answer += rome
num = num % dict[rome]
print(answer)
코드2
import sys
sys.stdin = open("input.txt")
input = sys.stdin.readline
def num2rome(num):
answer = ""
for rome in list(dict.keys()):
temp = num // dict[rome]
for _ in range(temp):
answer += rome
num = num % dict[rome]
return answer
def rome2num(rome):
flag = True
num = 0
for i in range(len(rome) - 1):
if flag:
if dict[rome[i + 1]] > dict[rome[i]]:
num += (dict[rome[i + 1]] - dict[rome[i]])
flag = False
else:
num += dict[rome[i]]
else:
flag = True
if flag:
num += dict[rome[-1]]
return num
dict = {"M": 1000, "CM": 900, "D": 500, "CD": 400, "C": 100,
"XC": 90, "L": 50, "XL": 40, "X": 10, "IX": 9, "V": 5,
"IV": 4, "I": 1}
a = list(input().rstrip())
b = list(input().rstrip())
number = rome2num(a) + rome2num(b)
print(number)
print(num2rome(number))
:start:풀이
먼저 기호와 숫자를 key, value로 갖는 dict를 만들어주었다. 풀이는 간단하다. 로마숫자를 아라비아 숫자로 바꿀 때에는 작은수가 큰수 앞에 오는 경우만 고려해주면 된다. 아라비아 숫자를 로마숫자로 바꿀 때에는 제일 큰 수부터 차례대로 나누어주면 된다. 코드를 두개 적었는데 코드1은 처음 풀었을 때의 코드이다. 입력에 두개만 들어와서 그냥 두개의 for문을 돌아주었다. 맞힌 사람들 코드를 구경하다가 함수로 정의하신 분들이 많이 있어서 나도 함수를 정의해서 코드를 작성해보았다. 만약 숫자가 여러개 들어오면 함수로 정의하여 푸는게 더 효율적일 것이다.
댓글남기기