로마자로 정수

2636 단어 theabbieleetcodedsa
로마 숫자는 I , V , X , L , C , DM 의 7가지 기호로 표시됩니다.

기호 값
나는 1
V 5
× 10
L 50
씨 100
디 500
남 1000

예를 들어, 2는 로마 숫자로 II로 표시되며, 1을 두 개만 더하면 됩니다. 12XII로 작성되며 간단히 X + II입니다. 숫자 27XXVII로 쓰여지며, 이는 XX + V + II입니다.

로마 숫자는 일반적으로 왼쪽에서 오른쪽으로 큰 순서로 씁니다. 그러나 4의 숫자는 IIII가 아닙니다. 대신, 숫자 4는 IV로 쓰여집니다. 1이 5보다 앞에 있기 때문에 빼면 4가 됩니다. 같은 원리가 IX로 쓰여진 숫자 9에도 적용됩니다. 빼기가 사용되는 경우는 6가지입니다.
  • IV (5)와 X (10) 앞에 배치되어 4와 9를 만들 수 있습니다.
  • XL (50) 및 C (100) 앞에 배치되어 40 및 90을 만들 수 있습니다.
  • CD (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
    

    좋은 웹페이지 즐겨찾기