반응형
- 로마 숫자는 7개의 다른 기호로 구성되며, 각 기호의 값은 다음과 같습니다:
기호값
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
로마 숫자는 십진수 자릿값의 변환을 가장 높은 자리부터 낮은 자리까지 차례로 추가하여 형성됩니다. 십진수 자릿값을 로마 숫자로 변환하는 규칙은 다음과 같습니다:
- 값이 4 또는 9로 시작하지 않는 경우, 입력에서 빼낼 수 있는 최대 값의 기호를 선택하여 결과에 추가하고, 그 값을 뺀 나머지를 다시 로마 숫자로 변환합니다.
- 값이 4 또는 9로 시작하는 경우, 다음 기호에서 하나를 뺀다는 빼기 형식을 사용합니다. 예를 들어, 4는 5(V)보다 1(I) 작으므로 "IV"이며, 9는 10(X)보다 1(I) 작으므로 "IX"입니다. 사용되는 빼기 형식은 다음과 같습니다: 4(IV), 9(IX), 40(XL), 90(XC), 400(CD), 900(CM).
- 10의 제곱수 (I, X, C, M)만이 최대 3번 연속으로 추가될 수 있습니다. 5(V), 50(L), 500(D)은 여러 번 추가할 수 없습니다. 만약 기호를 4번 추가해야 할 경우, 빼기 형식을 사용합니다.
주어진 정수를 로마 숫자로 변환하세요.
예시 1:
입력: num = 3749
출력: "MMMDCCXLIX"
설명:
3000 = MMM는 1000 (M) + 1000 (M) + 1000 (M)
700 = DCC는 500 (D) + 100 (C) + 100 (C)
40 = XL는 50 (L)보다 10 (X) 적음
9 = IX는 10 (X)보다 1 (I) 적음
참고: 49는 50 (L)보다 1 (I) 적은 것이 아닙니다. 변환은 십진수 자릿수를 기준으로 합니다.
예시 2:
입력: num = 58
출력: "LVIII"
설명:
50 = L
8 = VIII
예시 3:
입력: num = 1994
출력: "MCMXCIV"
설명:
1000 = M
900 = CM
90 = XC
4 = IV
제약사항:
1 <= num <= 3999
풀이
def int_to_roman(num):
# 로마 숫자와 해당 값의 목록을 정의합니다.
roman_numerals = [
("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)
]
# 결과 문자열을 초기화합니다.
result = ""
# 각 로마 숫자와 값에 대해 반복합니다.
for symbol, value in roman_numerals:
# 주어진 숫자에서 현재 값으로 나누어 몫을 구합니다.
while num >= value:
result += symbol # 결과 문자열에 로마 숫자를 추가합니다.
num -= value # 현재 값을 주어진 숫자에서 뺍니다.
return result
# 예시
print(int_to_roman(3749)) # 출력: "MMMDCCXLIX"
print(int_to_roman(58)) # 출력: "LVIII"
print(int_to_roman(1994)) # 출력: "MCMXCIV"반응형
'알고리즘 문제 > Medium' 카테고리의 다른 글
| 주유소 문제 - 134. Gas Station (0) | 2024.08.21 |
|---|---|
| 배열의 곱셈 제외하기 - 238. Product of Array Except Self (0) | 2024.08.20 |
| [Medium] 380. Insert Delete GetRandom O(1) (0) | 2024.08.17 |
| [Medium] H-지수- 274. H-Index (0) | 2024.08.16 |
| [Medium] 점프 게임 II - 45. Jump Game II (0) | 2024.08.16 |