leetcode - Roman to Integer

최대환·2021년 12월 16일
0

알고리즘

목록 보기
3/4

문제

로마에서 쓰던 로마숫자가 있는데 이를 지금쓰는 숫자로 바꾸는 문제이다. 이 문제에서의 가장 큰 어려움은 대부분의 로마 숫자는 하나의 값으로 치환되어 처리되어 더하면 되지만, 가끔 IV 와 같이두개를 묶어 계산해줄 필요가 있는 값들이 있다.


풀이

빈리스트를 만들어서 로마숫자로 들어온값이 만약 혼자 계산할 값이면 바로 리스트에 집어넣고 같이 묶어서 계산할 값이면 묶어서 리스트에 집어넣었다.
그러면 그 리스트의 로마 숫자들은 각각 계산하는 단위가 되는데, 이 리스트안에 들어있는 값(로마숫자)들을 현재 숫자로 바꿔 더하면 된다.

class Solution:
    def romanToInt(self, s: str) -> int:
        dic = {"M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1}
        letters = []
        
        for i, letter in enumerate(s):
            if i == 0 or len(letters[-1]) == 2:
                letters.append(letter)
                
#           가장 최근꺼의 값보다 지금 값이 더 크면 letters의 값을 둘이 합친 글자로 넣어줌
            elif dic[letters[-1]] < dic[letter]:
                letters[-1] = letters[-1] + letter
                
#           가장 최근꺼 값이 지금 값보다 작거나 같으면 그냥 새로운 값을 letters에 추가해줌
            elif dic[letters[-1]] >= dic[letter]:
                letters.append(letter)
            
        sum = 0 
        for letter in letters:
            if len(letter) == 1:
                sum += dic[letter]
                
            elif len(letter) == 2:
                sum += dic[letter[1]] - dic[letter[0]]
                
        return sum
profile
나의 개발지식 output 공간

0개의 댓글