숫자를 로마숫자로 바꾸는 문제
각 자릿수별로 숫자를 나누는게 좀 애매해서 그냥 str으로 변경 후 index로 읽었다..
class Solution:
def intToRoman(self, num: int) -> str:
tmp = str(num)
n = len(tmp)
answer =''
for i in range(n):
l = pow(10,n-1-i)
digit = int(tmp[i])
if l == 1000:
answer += 'M'*digit
elif l == 100:
if digit == 9:
answer = answer + 'CM'
elif 5<digit<9:
answer = answer +'D'+'C'*(digit-5)
elif digit ==4:
answer = answer +'CD'
else:
answer = answer +'C'*(digit-5)
elif l == 10:
if digit == 9:
answer = answer + 'XC'
elif 5<digit<9:
answer = answer +'L'+'X'*(digit-5)
elif digit ==4:
answer = answer +'XL'
else:
answer = answer +'X'*(digit-5)
else:
if digit == 9:
answer = answer + 'IX'
elif 5<digit<9:
answer = answer +'V'+'I'*(digit-5)
elif digit ==4:
answer = answer +'IV'
else:
answer = answer +'I'*(digit-5)
return answer
your input: 3
output: ""
expetected: "III"
digit ==5
상태가 누락됨.(digit-5)
수행함class Solution:
def intToRoman(self, num: int) -> str:
tmp = str(num)
n = len(tmp)
answer =''
for i in range(n):
l = pow(10,n-1-i)
digit = int(tmp[i])
if l == 1000:
answer += 'M'*digit
elif l == 100:
if digit == 9:
answer = answer + 'CM'
elif 4<digit<9:
answer = answer +'D'+'C'*(digit-5)
elif digit ==4:
answer = answer +'CD'
else:
answer = answer +'C'*(digit)
elif l == 10:
if digit == 9:
answer = answer + 'XC'
elif 4<digit<9:
answer = answer +'L'+'X'*(digit-5)
elif digit ==4:
answer = answer +'XL'
else:
answer = answer +'X'*(digit)
else:
if digit == 9:
answer = answer + 'IX'
elif 4<digit<9:
answer = answer +'V'+'I'*(digit-5)
elif digit ==4:
answer = answer +'IV'
else:
answer = answer +'I'*(digit)
return answer
class Solution(object):
def intToRoman(self, num):
"""
:type num: int
:rtype: str
"""
romans_digits = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
romans_letters = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
roman = ""
for i in range(len(romans_digits)):
while num >= romans_digits[i]:
roman += romans_letters[i]
num -= romans_digits[i]
return roman
다른 분이 올리신 최고로 빠른 코드인데, 큰 수 단위부터 하나씩 빼가면서 최종 결과를 만드는 방식.
이제 처음에는 0~3, 4, 5, 6~8, 9
이렇게 5가지 경우의 수에 대해서 1000/100/10/1
단위별로 계산이 필요하다고 생각했다.
아무튼 진짜 간결하게 잘 짠 코드갔다.