codekata #6

신승호·2021년 5월 3일

codekata

목록 보기
5/15

codekata_0503


문제

로마자에서 숫자로 바꾸기 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

Need to know

  1. 하나하나를 더하면 되는거야 하나씩 오케이 ?

문자로 짜봐

  • 딕셔너리로 만들어서 key값의 인덱스를 뽑아서 더할꺼야
  1. 먼저 roman을 변수로 딕셔너리로 만들어주고
    2. while문을 돌려서 인덱스 구하기위해 n=0 으로 하나 만들어주자
  2. 그걸 통해서 key값의 인덱스로 문자 하나씩 뽑아서 리스트에 추가 하기위해, 빈 리스트 하나 만들어줘 result=[]
  3. 3가지 경우의 수가 나올꺼야
    • 아래에서 설명 !
  4. 글고 리스트에 추가한다음 그리고 나서 다 더할꺼얌

정답

def roman_to_num(s):
    roman = {
    'I' : 1,
    'V' : 5,
    'X' : 10,
    'L' : 50,
    'C' : 100,
    'D' : 500,
    'M' : 1000,
    }
`
    n = 0
    result = []	
    while n < len(s):				# len(s)보다 작을때 
        if n == len(s)-1:			# len(s)-1 과 n이 같으면 추가(마지막이 같으면 뒤에꺼 비교할 필요가 없기때문에 그냥 추가)
            result.append(roman[s[n]])
            n += 1            
        elif roman[s[n+1]] > roman[s[n]]:	# 뒤에 숫자가 앞의 숫자보다 크면 (이경우는 4,9 or 40,90 이런거 만들때만 있으니까 빼주면 됌)
            sub = roman[s[n]] * -1
            result.append(sub)
            n += 1
        else:					# 보통의 경우는 바로 추가해주 고 
            result.append(roman[s[n]])
            n += 1
`
    return sum(result)				# 더한 값 고고 

참고

  • sum(result) : 리스트 더하기
  • dictionary에 key값 구하는것 / 다른 문자열의 인덱스를 통해 문자 뽑아낸다음
  • while 문
profile
신승홉니다

0개의 댓글