SW개발/코딩테스트

[LeetCode]Roman to Integer

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

 

Roman to Integer - LeetCode

Can you solve this real interview question? Roman to Integer - Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example, 2 is written as II in Roman numeral, just tw

leetcode.com

 

문제 분석

로마 숫자를 10진법 정수로 변환하는 문제입니다.

 

답안 

class Solution:
    def romanToInt(self, s: str) -> int:
        """
        Change roman numeral system to our numeral system
        """
        symbol_dict = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M': 1000}

        s = s.replace('IV', 'IIII').replace('IX', 'VIIII')
        s = s.replace('XL', 'XXXX').replace('XC', 'LXXXX')
        s = s.replace('CD', 'CCCC').replace('CM', 'DCCCC')

        output = 0

        for char in s:
            output += symbol_dict[char]

        return output

접근 방법

  1. symbol에 해당하는 값을 가지고 있는 딕셔너리를 만듭니다.
  2. 제약조건에 나와있는 로마 숫자의 시스템을 우리만의 시스템으로 간략화합니다.
  3. IV -> IIII 와 같이 문자를 바꿔치기해 더하기에 용이하도록 변경합니다.
  4. 반복문을 순회하면서 숫자를 더합니다.

처음에는 제약조건에 나와있는 규칙을 토대로 값을 더하거나 빼는 방식으로 구현했습니다. 하지만 몇몇 코너케이스에서 계속 통과가 되지 않아서 다른 풀이를 참조했습니다.

 

정말 쉽고 좋은 풀이를 발견하게 되었는데 바로 로마 숫자 시스템을 간략화 해 덧셈만으로만 계산이 되도록 바꾸는 방법입니다. 물론, 이 방법은 6가지로 경우의 수가 한정이 되어 있었기에 간략화 하는 것이 가능 했습니다. 하지만 종종 이런 방향으로 사고하는 것도 필요할 것 같습니다.

 

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[LeetCode]Valid Parentheses  (0) 2023.03.19
[LeetCode]Longest Common Prefix  (0) 2023.03.19
[LeetCode]Two Sum  (0) 2023.03.18
[프로그래머스]정수 삼각형 - DP  (0) 2021.12.31
[프로그래머스]N으로 표현 - DP  (0) 2021.12.31