반응형
SMALL
오랜만에 포스팅입니다 !
최근 너무 바쁘군요 ㅠㅠ 그렇다고 제가 공부 안하는건 아니고, 포스팅을 할 시간이 없네요 ㅠ
그래도 꾸준히 정리를 해나가곤 있습니다. 시간이 있는 날 모두 포스팅을 하도록 하겠습니다 !!
https://leetcode.com/problems/roman-to-integer/
오늘 문제는 Roman to Integer 입니다. 제공되는 문자를 번역하여, Integer로 표현을 해야하는 문제입니다. 쉬워요 되게
우선, Symbol들을 전부 dictionary로 만들고, 그 문자에 맞도록 결과에 덧셈을 하면 됩니다만, Edge Case가 존재하죠. 'IV, IX' / 'XL, XC' / 'CD, CM' 이 수들은 '4, 9' / '40, 90' / '400, 900' 입니다.
즉, I / X / C 문자를 만나면 그 다음 문자를 체크해서 숫자를 더하면 됩니다.
그 다음 문자라 하면 index + 1이겠죠.
근데 만약 문자열 마지막에서 다음 문자를 확인하려고 하면 index 에러가 뜨겠죠?
이 경우도 체크를 해줘서, 에러가 뜨지 않도록 만들어주었습니다.
코드 갑니다잉
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
dic = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
idx = 0
result = 0
while idx < len(s):
if s[idx] == 'I' or s[idx] == 'X' or s[idx] == 'C':
if s[idx] == 'I':
if idx + 1 < len(s) and s[idx + 1] == 'V':
result += 4
idx += 1
elif idx + 1 < len(s) and s[idx + 1] == 'X':
result += 9
idx += 1
else:
result += 1
elif s[idx] == 'X':
if idx + 1 < len(s) and s[idx + 1] == 'L':
result += 40
idx += 1
elif idx + 1 < len(s) and s[idx + 1] == 'C':
result += 90
idx += 1
else:
result += 10
elif s[idx] == 'C':
if idx + 1 < len(s) and s[idx + 1] == 'D':
result += 400
idx += 1
elif idx + 1 < len(s) and s[idx + 1] == 'M':
result += 900
idx += 1
else:
result += 100
else:
result += dic[s[idx]]
idx += 1
return result
문제 쉽죠? 쉬운 문제는 주석은 달지 않도록 하겠습니다.
절대 귀찮아서가 아니에요 !!
하핫
이상 13. Roman to Integer였습니다. ^_^
반응형
LIST
'알고리즘 문제 풀이 > LeetCode' 카테고리의 다른 글
20. Valid Parentheses (0) | 2020.07.01 |
---|---|
14. Longest Common Prefix (2) | 2020.07.01 |
581. Shortest Unsorted Continuous Subarray (0) | 2020.04.16 |
414. Third Maximum Number (0) | 2020.04.15 |
859. Buddy Strings (0) | 2020.04.15 |