Algorithm (PS)
[LeetCode] 13. Roman to Integer - Python
minjiwoo
2023. 11. 12. 19:35
728x90
Question:
https://leetcode.com/problems/roman-to-integer/
Roman to Integer - LeetCode
Can you solve this real interview question? Roman to Integer - Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example, 2 is written as II in Roman numeral, just tw
leetcode.com
이게 좋은 풀이인지는 모르겠는데;; 일단 쌩 구현으로 제출해서 accepted 된 코드 :
Answer:
class Solution:
def romanToInt(self, s: str) -> int:
symbols = {"I": 1, "V": 5, "X": 10, "L":50, "C": 100, "D": 500, "M": 1000}
N = len(s)
stack = []
answer = 0
i = 0
while i < N:
if s[i] == 'I':
if i+1 < N and s[i+1] == 'V':
answer += 4
i += 2
elif i+1 < N and s[i+1] == 'X':
answer += 9
i += 2
else:
answer += 1
i += 1
elif s[i] == 'X':
if i+1 < N and s[i+1] == 'L':
answer += 40
i += 2
elif i+1 < N and s[i+1] == 'C':
answer += 90
i += 2
else:
answer += 10
i += 1
elif s[i] == 'C':
if i+1 < N and s[i+1] == 'D':
answer += 400
i += 2
elif i+1 < N and s[i+1] == 'M':
answer += 900
i += 2
else:
answer += 100
i += 1
else:
answer += symbols[s[i]]
i += 1
return answer
더 나은 풀이 :
class Solution:
def romanToInt(self, s: str) -> int:
symbols = {"I": 1, "V": 5, "X": 10, "L":50, "C": 100, "D": 500, "M": 1000,
"IV": 4, "IX": 9, "XL": 40, "XC": 90, "CD":400, "CM": 900}
N = len(s)
answer = 0
i = 0
while i < N:
# substraction 예외 처리
if i+1 < N and s[i] + s[i+1] in symbols: # ex. IV, IX, XL, XC, CD, CM
answer += symbols[s[i] + s[i+1]]
i += 2
else: # 나머지 : 본래 값 dictionary 에서 찾아서 더해주기
answer += symbols[s[i]]
i += 1
return answer
728x90