[Code Kata] 2. 로마자에서 숫자로 바꾸기

JY·2023년 5월 24일

CodeKata

목록 보기
2/5

문제

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

로마자를 숫자로 읽는 방법 - 로마자를 왼쪽부터 차례대로 더하기
III = 3 / XII = 12 / XXVII = 27

그러나 4를 표현할 때는 IIII가 아니라 IV로, 뒤의 숫자에서 앞의 숫자를 빼야함

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

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

풀이

  1. 먼저 map 메서드으로 각 로마자에 대응하는 숫자로 변환해서 배열을 반환
  2. 처음에는 문제에 주어진 I, X, C 사례(4, 40, 400 등)만 고려하여 코드를 작성하다가 1994(MCMXCIV)와 같이 I, X, C와 같은 상황이 두 번 이상 발생할 경우 적용이 안되는 것을 확인하였다.
  3. 각 로마자를 하나씩 잘라보다가 다음과 같다는 것을 확인하고 아래와 같이 코드에 적용했다.

    MCMXCIV = M + M - C + C - X + V - I
    => M - C + M - X + C - I + V

function romanToNum(s) {
const arr = s.split("")
const convert = {I:1, V:5, X:10, L:50, C:100, D:500, M:1000}
 
const result = arr.map(symbol=> convert[symbol])
 let sum =0;
  for (let i=0; i < result.length; i++){ 
    if(result[i] < result[i+1]){
    sum = sum - result[i]
    } else{
    sum += result[i];   
    }} 
    return sum;
}
profile
Hello World!

0개의 댓글