일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 헤드라인기사
- 헤드라인모음
- 20201011뉴스
- 헤드라인
- 뉴스
- encoding
- 코테
- 백준2225
- json
- C++
- 뉴스헤드라인
- 20201018뉴스
- LeetCode #Python #알고리즘 #코딩테스트 #interview
- 20200816뉴스
- 백준
- 20200615뉴스
- 알고리즘
- 헤드라인뉴스
- 기사
- MySQL
- 20201017뉴스
- 20201016뉴스
- 파이썬
- 크롤링
- Python
- 기사헤드라인
- 20201015뉴스
- 20201013뉴스
- 경제뉴스
- 오늘의뉴스
Archives
- Today
- Total
HelloCho
[Python] #13. Roman to Integer(Easy) 본문
문제 #13. Roman to Integer
이 문제는 String으로 입력된 문자를 숫자 값으로 바꾸는 문제이다.
이 문제에서 가장 신경써야할 부분은
IV나 IX등 두 개의 문자를 함께 입력 해야하는 숫자가 있기 때문에 이것을 고려해야한다.
처음 작성한 코드
class Solution:
def romanToInt(self, s: str) -> int:
dic = {
'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
}
i = 0
result = 0
while True:
if len(s[i:]) >=2:
if s[i]+s[i+1] in dic:
result += dic[s[i:i+2]]
i += 2
else:
result += dic[s[i]]
i +=1
else:
result += dic[s[i]]
i +=1
if i >= len(s):
break
return result
반복되는 부분도 있고 뭔가... 이상하지만 dictionary를 이용해 길이가 2 이상일 경우 2개의 문자열을 가지고와 dictionary에 값이 있을 경우 값을 result에 더해주고 index값을 변환한다.
그렇지 않을 경우에는 문자열 하나의 값을 더해준다.
시간은 36ms, 메모리는 14MB이다.
다음 방법은 사실 로직은 같다. 약간 다른 방식으로 코드를 작성해봤다.
class Solution:
def romanToInt(self, s: str) -> int:
dic = {
'I' : 1, 'V' : 5, 'X' : 10, 'L' :50, 'C' : 100, 'D' :500,'M':1000,
}
dic2 = {
'IV': 4, 'IX': 9, 'XL' : 40, 'XC':90, 'CD': 400, 'CM':900
}
i = 0
result = 0
while i<len(s):
tmp = s[i]
if len(s[i:]) >=2:
tmp = s[i] + s[i+1]
if tmp not in dic2:
result +=dic[s[i]]
i +=1
else:
result += dic2[tmp]
i += 2
if i >= len(s):
break
return result
tmp값을 이용해서 값을 하나 받고, 길이가 2이상일 경우 dic2에 값이 있는지 여부를 파악해 result에 값을 더 해준다.
이 방법을 이용할 경우.. 위에 방법에서 볼 수 있었던 반복을 없앨 수 있었다.
성능은 40ms , 메모리는 13.9MB이다.
'코테 > LeetCode' 카테고리의 다른 글
[Python] #2. Add Two Numbers(Medium) (0) | 2020.08.29 |
---|---|
[Python] #14. Longest Common Prefix(Easy) (0) | 2020.08.29 |
[Python] #9.Palindrome Number (Easy) (0) | 2020.08.26 |
[Python] #7.Reverse Integer (Easy) (0) | 2020.08.26 |
[Python] #1.Two Sum (Easy) (0) | 2020.08.26 |
Comments