codekata #6 (week 2) Roman to Integer

Junyoung Kim·2022년 1월 17일
0

algorithm

목록 보기
6/12

Leetcode #13 Roman to Integer

문제

로마자에서 숫자로 바꾸기 1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요.

로마 숫자를 숫자로 표기하면 다음과 같습니다.

SymbolValue
I1
V5
X10
L50
C100
D500
M1000

로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다.
III = 3
XII = 12
XXVII = 27입니다.

그런데 4를 표현할 때는 IIII가 아니라 IV 입니다.
뒤의 숫자에서 앞의 숫자를 빼주면 됩니다.
9는 IX입니다.

I는 V와 X앞에 와서 4, 9
X는 L, C앞에 와서 40, 90
C는 D, M앞에 와서 400, 900

나의 풀이

def roman_to_num(s):
  # 여기에 코드를 작성해주세요.
    roma = {
        'I' : 1, 
        'V' : 5,
        'X' : 10,
        'L' : 50,
        'C' : 100,
        'D' : 500,
        'M' : 1000
        }

    result = 0
    for i in range(len(s)):
        if i < len(s) - 1 and roma[s[i]] < roma[s[i+1]]:
            result -= roma[s[i]]
        else:
            result += roma[s[i]]
            
    return result

# print(roman_to_num("XXIV"))
# X index0   index0 = index[1] +10
# X index1   index0 > index[1] +10
# I index2   index1 < index[2] -1
# V index3   index2 < index[-1] +5
  • 처음에는 IV, IX , XL, XC, CD, CM 6가지 전부를 if in s에 넣고 존재하면 값을 빼는 코드로 짬
  • 너무 길어져서 중간에 선회, 왼쪽부터 차례대로 더한다는 것에 착안에 for loop 순회시 자신의 오른쪽 값과 비교한다는 로직 생각해냄
  • XXIV라는 구체적 숫자와 과정을 적고 코드 구체화
  • IndexError를 방지하기 위해서 제일 마지막 인덱스는 오른쪽 값과 비교 X

0개의 댓글

관련 채용 정보