https://leetcode.com/problems/roman-to-integer/
최근에 추천받았던 LeetCode라는 외국 PS사이트입니다.
디자인도 예쁘고 개인이 사용한 자료구조, 알고리즘 통계나 문제 풀이 코스같이 특정 기간동안 스케쥴 관리 해주는 기능이 참 좋아보이네요.
LeetCode는 Easy - Medium - Hard 3단계로 문제의 난이도가 구분되어 있습니다. 회원가입하자마자 문제 리스트를 추천받았는데 가장 위에 있던 문제입니다.
문제 자체는 문자열을 조건에 맞추어 숫자로 변환하기만 하면 되는데요, if문을 중첩하거나 switch-case를 쓰거나 여러가지 방법이 있을겁니다.
Python의 Dictionary를 이용해서 두가지 방법으로 풀었는데요.
첫 코드는 if문을 여러개 쪼개서 조건을 구분한 코드인데 통과는 되었지만 코드라인도 길고 깔끔하지 않아서 Dictionary를 좀 더 사용하는 코드로 다시 작성했습니다.
class Solution(object):
def romanToInt(self, s: str) -> int:
sum = 0
i = 0
symbol = {'I': 1, 'V': 5,'X': 10,'L': 50,'C': 100,'D': 500,'M': 1000}
while(i < len(s)):
if( i < len(s) - 1) :
if(s[i] == 'I'):
if(s[i+1] == 'V'):
sum += 4
i += 1
elif(s[i+1] == 'X'):
sum += 9
i += 1
else :
sum += symbol[s[i]]
elif(s[i] == 'X'):
if(s[i+1] == 'L'):
sum += 40
i += 1
elif(s[i+1] == 'C'):
sum += 90
i += 1
else :
sum += symbol[s[i]]
elif(s[i] == 'C'):
if(s[i+1] == 'D'):
sum += 400
i += 1
elif(s[i+1] == 'M'):
sum += 900
i += 1
else :
sum += symbol[s[i]]
else :
sum += symbol[s[i]]
else:
sum += symbol[s[i]]
i += 1
return sum
input = ["III","LVIII","MCMXCIV"]
for i in input:
print(Solution().romanToInt(i))
# Solution().romanToInt(input[2])
class Solution(object):
def romanToInt(self, s: str) -> int:
symbolValue = {'I': 1, 'IV':4, 'V': 5, 'IX':9, 'X': 10, 'XL':40, 'L': 50, 'XC':90, 'C': 100, 'CD': 400, 'D': 500, 'CM': 900, 'M': 1000}
sum = 0
i = 0
while(self.indexInString(i, s)):
if(self.indexInString(i+1, s) and s[i: i+2] in symbolValue):
sum += symbolValue[s[i: i+2]]
i += 2
else:
sum += symbolValue[s[i]]
i += 1
return sum
def indexInString(self, i: int, s:str)-> bool:
return i < len(s)
input = ["III","LVIII","MCMXCIV"]
for i in input:
print(Solution().romanToInt(i))
# Solution().romanToInt(input[2])
728x90
'🔍 알고리즘 > Leetcode' 카테고리의 다른 글
[Python] Leetcode 509. Fibonacci Number (Easy) (0) | 2022.07.22 |
---|---|
[Python] Leetcode 392. Is Subsequence (Easy) (0) | 2022.07.22 |
[Python] Leetcode 205. Isomorphic Strings (Easy) (0) | 2022.07.22 |
[Python] Leetcode 724. Find Pivot Index (Easy) (0) | 2022.07.21 |
[Python] Leetcode 1480. Running Sum of 1d Array (Easy) (0) | 2022.07.21 |