노력에는 지름길이 없으니까요

LeetCode - 13. Roman to Integer (Python ver.) 본문

Python/프로그래머스

LeetCode - 13. Roman to Integer (Python ver.)

데건 2024. 9. 6. 14:33
728x90

 

해결일 언어 레벨 테스트명
20240906 Python easy  13. Roman to Integer

 

링크 : https://leetcode.com/problems/roman-to-integer/description/

 

 


 

내 코드

class Solution:
    def romanToInt(self, s: str) -> int:
        test = {1 : 'I',
            5 : 'V',
            10: 'X',
            50: 'L',
            100: 'C',
            500: 'D',
            1000:'M'}
        sum = 0
        for key, value in test.items():
            sum += key*(s.count(value))
        for i in range(len(s)-1) :
            if s[i] == 'I' and ((s[i+1] == 'V') or (s[i+1] == 'X')) :
                sum-=1*2
            elif s[i] == 'X' and ((s[i+1] == 'L') or (s[i+1] == 'C')) :
                sum-=10*2
            elif s[i] == 'C' and ((s[i+1] == 'D') or (s[i+1] == 'M')) :
                sum-=100*2
            else : continue

        return sum

 

 

보강할 부분

  • 우선 딕셔너리 설정 방식... 숫자를 value로 빼는 게 조금 더 일반적인 방식인 듯 하니 기억해두기
  • for문을 굳이 두번 쓴건 게으르기 때문이다.
  • 규칙을 조금 더 제대로 이해했다면 if문 늘릴 필요 없었을 듯 싶다

 

 

베스트 코드

class Solution:
    def romanToInt(self, s: str) -> int:
        dic = {"M":1000, "D": 500, "C": 100,"L":50, "X":10, "V": 5, "I":1}
        
        temp = 0
        for i in range(len(s)-1):
            num = dic[s[i]]
            next_num = dic[s[i+1]]
            if(num>=next_num):
                temp += num
            else:
                temp -= num
        
        temp += dic[s[len(s)-1]]
            
        return temp

 

 

 

방법이 하찮았기 때문에 나중에 다시 풀어보기

 

 

728x90
반응형