CodeKata # romanToNum

이선호·2021년 10월 3일

로마자에서 숫자로 바꾸기

1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요. 로마 숫자를 숫자로 표기하면 다음과 같습니다.

Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다. 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


풀이

우선 객체를 이용하여 key와 value값으로 만들어주고
반복문으로 값을 확인한뒤
일반 케이스와 예외 케이스를 생각하고 조건문을 작성한다.

//일반 케이스
III = 3 // 1+1+1
V = 5 
VI = 6 // 5+1
LX = 60 // 50+10

//예외 케이스
IV = 4 //-1 + 5
IX = 9 //-1 + 10
XL = 40 //-10 + 50 
XC = 90 //-10 + 100 

조건문은 위 표와 같이
일반 케이스 (앞의 숫자 > 뒤의 숫자) 두의 값을 더하기
예외 케이스 (앞의 숫자 < 뒤의 숫자) 뒤의 숫자 - 앞의 숫자

function romanToNum(s) {
  const roman = {
   'I' : 1,
   'V' : 5,
   'X' : 10, 
   'L' : 50, 
   'C' : 100,
   'D' : 500,
   'M' : 1000
  };
  
let num = 0;
  
  for(let i=0; i<s.length; i++){
    if(roman[s[i]] < roman[s[i+1]]){
      num -= roman[s[i]]
    } else {
      num += roman[s[i]]
    }
  }
  return num  
}
romanToNumXXVII('XXVII')
//27

0개의 댓글