반응형
13. 로마 숫자를 정수로 변환하기
로마 숫자는 다음과 같은 7개의 다른 기호로 표현됩니다: I, V, X, L, C, D, M.
기호값
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
예를 들어, 숫자 2는 로마 숫자로 II로 쓰이며, 이는 1이 두 번 더해진 것입니다. 숫자 12는 XII로 쓰이며, 이는 단순히 X + II입니다. 숫자 27은 XXVII로 쓰이며, 이는 XX + V + II입니다.
로마 숫자는 보통 가장 큰 값부터 작은 값 순서로 왼쪽에서 오른쪽으로 씁니다. 그러나 숫자 4는 IIII가 아닌 IV로 씁니다. 이는 1이 5 앞에 오기 때문에 5에서 1을 빼서 4가 됩니다. 같은 원칙이 숫자 9에도 적용되며, 이는 IX로 씁니다. 다음 6가지 경우에서 감산이 사용됩니다:
- I는 V(5)와 X(10) 앞에 올 수 있어 4와 9를 만듭니다.
- X는 L(50)과 C(100) 앞에 올 수 있어 40과 90을 만듭니다.
- C는 D(500)와 M(1000) 앞에 올 수 있어 400과 900을 만듭니다.
주어진 로마 숫자를 정수로 변환하세요.
예시
예시 1:
- 입력: s = "III"
- 출력: 3
- 설명: III = 3.
예시 2:
- 입력: s = "LVIII"
- 출력: 58
- 설명: L = 50, V = 5, III = 3.
예시 3:
- 입력: s = "MCMXCIV"
- 출력: 1994
- 설명: M = 1000, CM = 900, XC = 90, IV = 4.
제한 사항
- 1 <= s.length <= 15
- s는 'I', 'V', 'X', 'L', 'C', 'D', 'M' 문자만 포함합니다.
- s는 [1, 3999] 범위 내의 유효한 로마 숫자임이 보장됩니다.
풀이
class Solution:
def romanToInt(self, s: str) -> int:
result = 0
roman = {
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000,
}
prev = 0
for i in range(len(s)-1, -1, -1):
n = roman[s[i]]
if prev > n:
result -= n
else:
result += n
prev = n
return result반응형
'알고리즘 문제 > Easy' 카테고리의 다른 글
| 14. 가장 긴 공통 접두사 - Longest Common Prefix (1) | 2024.11.18 |
|---|---|
| 58. 마지막 단어의 길이 - Length of Last Word (1) | 2024.11.17 |
| [Easy] 주식을 팔아 최대 이익을 얻는 날 구하기 - 121. Best Time to Buy and Sell Stock (0) | 2024.08.13 |
| [Easy] 배열에서 과반이 넘는 요소 찾기 - 169. Majority Element (0) | 2024.08.09 |
| [Easy] 정렬된 배열에서 중복 제거 - 26 Remove Duplicates from Sroted Array (0) | 2024.08.07 |