로마자로 정수
I
, V
, X
, L
, C
, D
및 M
의 7가지 기호로 표시됩니다.기호 값
나는 1
V 5
× 10
L 50
씨 100
디 500
남 1000
예를 들어,
2
는 로마 숫자로 II
로 표시되며, 1을 두 개만 더하면 됩니다. 12
는 XII
로 작성되며 간단히 X + II
입니다. 숫자 27
는 XXVII
로 쓰여지며, 이는 XX + V + II
입니다.로마 숫자는 일반적으로 왼쪽에서 오른쪽으로 큰 순서로 씁니다. 그러나 4의 숫자는
IIII
가 아닙니다. 대신, 숫자 4는 IV
로 쓰여집니다. 1이 5보다 앞에 있기 때문에 빼면 4가 됩니다. 같은 원리가 IX
로 쓰여진 숫자 9에도 적용됩니다. 빼기가 사용되는 경우는 6가지입니다.I
는 V
(5)와 X
(10) 앞에 배치되어 4와 9를 만들 수 있습니다. X
는 L
(50) 및 C
(100) 앞에 배치되어 40 및 90을 만들 수 있습니다. C
를 D
(500) 및 M
(1000) 앞에 배치하여 400 및 900을 만들 수 있습니다. 정수가 주어지면 로마 숫자로 변환하십시오.
예 1:
입력: 숫자 = 3
출력: "III"
설명: 3은 3개의 1로 표현됩니다.
예 2:
입력: 숫자 = 58
출력: "LVIII"
설명: L = 50, V = 5, III = 3.
예 3:
입력: 숫자 = 1994
출력: "MCMXCIV"
설명: M = 1000, CM = 900, XC = 90 및 IV = 4.
제약:
1 <= num <= 3999
해결책:
class Solution:
def intToRoman(self, num: int) -> str:
sym = {
1: "I",
5: "V",
10: "X",
50: "L",
100: "C",
500: "D",
1000: "M"
}
keys = list(sym.keys())
k = len(keys)
vals = []
i = 1
while num > 0:
curr = num % (10 ** i)
vals.insert(0, curr)
num -= curr
i += 1
print(vals)
op = ""
curr = 0
while curr < len(vals):
v = vals[curr]
if v in sym:
op += sym[v]
else:
found = False
for i in range(k):
for j in range(i + 1, k):
if v == keys[j] - keys[i]:
found = True
op += sym[keys[i]] + sym[keys[j]]
break
if not found:
for key in keys[::-1]:
if v > key:
op += sym[key] * (v // key)
vals.insert(curr + 1, v % key)
break
curr += 1
return op
Reference
이 문제에 관하여(로마자로 정수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/integer-to-roman-1dol텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)