Search

Roman to Int

문제 설명 : 그리스 숫자를 int형 숫자로 변경
풀이 방법
IV 와 같은 경우만 제외하면, 나머지는 그냥 해시테이블을 통해 값을 얻어오면서 더해주면 된다.
다만 IV 와 같은 문자는 왼쪽에 여러 문자가 붙을 수 있기 때문에, 오른쪽 → 왼쪽으로 탐색하며 처리하는게 좋을 것 같았다.
시간복잡도 : O(N)O(N)
성공 코드
class Solution: def romanToInt(self, s: str) -> int: roman_numerals_info = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000 } stack = list(s) result = 0 while stack: # IV 와 같은 숫자를 표현하기 위해서는, 오른쪽 -> 왼쪽 방향으로 읽어야한다. # VI 숫자는 그냥 5 + 1로 더하면 되지만, IV는 I와 V를 비교한 후 5 + 1이 아닌 5 - 1로 할 수도 있기 때문이다. ch = stack.pop() result += roman_numerals_info[ch] # 만약 현재 문자의 왼쪽에 붙어있는 문자들이 더 낮은 숫자를 의미할 경우, 빼준다. while stack and roman_numerals_info[ch] > roman_numerals_info[stack[-1]]: small_num = stack.pop() result -= roman_numerals_info[small_num] return result
Python
복사