728x90
Question:
https://leetcode.com/problems/roman-to-integer/
이게 좋은 풀이인지는 모르겠는데;; 일단 쌩 구현으로 제출해서 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
'Algorithm (PS)' 카테고리의 다른 글
[프로그래머스/kakao] 코딩 테스트 공부 (DP) - Python (2) | 2023.11.19 |
---|---|
[프로그래머스] 미로 탈출 명령어 - Python (BFS) (1) | 2023.11.14 |
[백준] 1261번: 알고스팟 (Python) - 0-1 BFS 탐색 (0) | 2023.10.29 |
[Programmers] 표현 가능한 이진트리 - Python (1) | 2023.10.23 |
[프로그래머스] 파괴되지 않은 건물 (누적합|Python) (1) | 2023.10.15 |