[CodeKata]Day6

박민하·2022년 6월 15일
0

python 문제

목록 보기
21/49
post-thumbnail

Code Kata 란, 2인 1조의 구성으로 서로 협력하여 하루에 한 문제씩 해결하는 과제입니다.


# 문제

로마자에서 숫자로 바꾸기 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):
  romalist = list(s)
  numberlist = []
  
  roma_number = {
      'I':'1', 'V':'5', 'X':'10', 'L':'50', 'C':'100', 'D':'500', 'M':'1000'
  }
  
  for i in romalist:
    i_int = roma_number.get(i)
    numberlist.append(i_int)
  
  indexnumber = len(numberlist)
  resultlist = []
  
  for i in range(1, indexnumber) :
      a = int(numberlist[i-1])
      b = int(numberlist[i])
      if a < b :
          c = -a
          resultlist.append(c)
      if a >= b :
          resultlist.append(a)
  
  aa = int(numberlist[indexnumber-1])
  resultlist.append(aa)
  res = sum(resultlist)
  
  return res

# 풀이 과정

  1. s를 리스트 값으로 변환
  2. for문을 사용하여 roma_number의 벼열 가져오기
  3. numberlist에 추가

# ?

1시간 이내에 해결 실패. 사실 아직도 잘 이해 안된다.


+ 그 외 코드

# dict2에 매치되는애들을 스트링에서 찾아서 숫자로 바꾸고 스트링에서 그 문자를 빼버린뒤에
남은 숫자 더하는겁니다.
def roman_to_num(s):
    dict1={'I':1 ,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,}
    dict2={'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900 }
    a = 0
    for key,value in dict2.items():
        if key in s:
            a += value               
            s = s.replace(key,'')   
    for i in s:
        a += dict1[i]
#dict3을 저렇게 만들어서 특수경우를 걍 다 풀어버린겁니다.
def roman_to_num(s):
    dict1={'I':1 ,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,}
    dict3={'IV':'IIII','IX':'VIIII','XL':'XXXX','XC':'LXXXX','CD':'CCCC','CM':'DCCCC' }
    a = 0
    for key, value in dict3.items():
        s = s.replace(key,value)
    for i in s:
        if i in s:
            a += dict1[i]
def roman_to_num(s):
  # 여기에 코드를 작성해주세요.
    roman_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}

    num = 0
    for i in range(len(s)):
        num += roman_dict[s[i]]
        print(num)
    if 'IV' in s or 'IX' in s:
        num -= 2
    if 'XL' in s or 'XC' in s:
        num -= 20
    if 'CD' in s or 'CM' in s:
        num -= 200
    return num

만약 s=IV 라면
roman_dict[IV[0]] => I => 1
roman_dict[IV[1]] => V => 1+5 = 6
if 'IV' in s에 해당, num -= 2
최종 값 6 - 2 = 4

profile
backend developer 🐌

0개의 댓글