21.3.8

알고리즘 5일차

문제 : 로마 숫자를 정수로 반환

  1. 오전 내내 문제가 안 풀린 이유 : 문제를 반대로 읽었다.(정수를 로마 숫자로 변환하는 줄 알고...)

  2. 문제의 키 : 4,9,6,11 등 5,10에 +1, -1을 한 값이다. 이에 따라 위치가 왼쪽이냐 오른쪽이냐에 따라 조건을 주어 +- 1을 해주는 방식

예를 들어 IX를 s값에 입력했다고 가정해보자.

내 코드 :

def roman_to_num(s):
        dic = {"M":1000, "D": 500, "C": 100,"L":50, "X":10, "V": 5, "I":1}
        result = 0
        # 알아야할 정수값
        for i in range(len(s)-1) :
        # 왜? : 문자열이니까 이걸 분해하기 위해서는 이렇게 함.
            num = dic[s[i]]
            #문자열 1
            nextNum = dic[s[i+1]]
            #문자열 2
            if (num>=nextNum) :
                result += num
                # 이 경우는 11처럼 XI인 경우
            else :
                result -= num
                # 이 경우는 9처럼 IX인 경우
                # 여기서 나오는 값이 -1

        result += dic[s[len(s)-1]]
        # 실제 결과는 X를 더해줘야 하므로
        # 어떻게 해도 5, 10, 100은 +가 되고 1에 대해서는 5, 10에서 왼쪽에 있을 때는 -1, 오른쪽에 있을 때는 +1이 된다.

        return (result)

굉장히 까다롭고 어려운 로직. 꼭 복습 필요.(주말 이용)

좋은 웹페이지 즐겨찾기